我使用了很多与std::for_each
、bind
等相关的STL
代码,但我注意到有时候使用STL
并不是一个好主意。
例如,如果你有一个std::vector
并且想对每个向量项执行一项操作,你的第一个想法可能是使用以下代码:
std::for_each(vec.begin(), vec.end(), Foo())
它很优雅,可以用一段时间。但随之而来的是第一组错误报告,您需要修改代码。现在您应该添加参数来调用Foo()
,所以现在变成:
std::for_each(vec.begin(), vec.end(), std::bind2nd(Foo(), X))
但这只是一个临时解决方案。现在项目正在成熟,您对业务逻辑有了更好的理解,并且想要向代码添加新的修改。此时,您意识到应该使用旧的好方法:
for(std::vector::iterator it = vec.begin(); it != vec.end(); ++it)
这只发生在我身上吗?你的代码中是否也有类似的模式?使用STL
时,您是否遇到过类似的反模式?
typedef std::vector::iterator VecIter;
)。标准库的问题在于,通常它是在给定编译器上完成某些事情的最干净的一般方式,因为编译器的创建者或最了解它的人(如果不是创建者)将编写其实现。当有用时,不要害怕使用它。 - Justin Time - Reinstate Monica