我使用了很多STL
代码std::for_each
,bind
,等等,但我注意到有时使用STL
不是好主意。STL有多少太多?
例如,如果你有一个std::vector
和想要做的向量的每个项目一个动作,你的第一个想法就是用这样的:
std::for_each(vec.begin(), vec.end(), Foo())
,它是优雅和OK,一会。但是接下来是第一组错误报告,您必须修改代码。现在,你应该添加参数来调用Foo()
,所以现在就变成:
std::for_each(vec.begin(), vec.end(), std::bind2nd(Foo(), X))
但这只是治标不治本。现在项目已经成熟,并且您更好地理解业务逻辑,并且希望为代码添加新的修改。在这一点上,你意识到你应该使用旧的好东西:
for(std::vector::iterator it = vec.begin(); it != vec.end(); ++it)
这是只发生在我身上吗?你在代码中认识到这种模式吗?您是否使用过STL
体验过类似的反模式?
顺便说一句,如果在你的第二个例子中,所有元素的“X”是相同的。只需将它传递给Foo的构造函数,并将其存储在函数中而不是绑定它。简单得多。 – 2009-04-09 14:04:46
你实际上没有使用STL,所以你很安全:) – 2016-06-23 16:52:28
只是一个意见,但“太多”是当你使用的功能,你不需要仅仅为了使用它们。如果有用,请使用它。如果你担心名字太长,你总是可以使用typedef或命名空间别名来缩短它们(例如`typedef std :: vector :: iterator VecIter;`)。使用标准库的事情是,它通常是在给定的编译器上执行某些操作的最简洁的通用方法,仅仅是因为编译器的创建者或最了解它的人(如果不是创建者)会编写它的实现。不要害怕在有用时使用它。 – 2016-06-23 18:09:39