c++ - 多少 STL 是太多了?

标签 c++ stl coding-style

<分区>

我在 std::for_eachbind 等方面使用了很多 STL 代码,但我注意到有时 STL 用法不是个好主意。

例如,如果您有一个 std::vector 并且想对 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 时遇到过类似的反模式吗?

最佳答案

使用 boost::bind with std::for_each 以一种干净的方式解决了这个问题。或者你可以使用 BOOST_FOREACH .

std::for_each 的例子:

std::for_each(v.begin(), v.end(), boost::bind(&C::f, _1, param));

BOOST_FOREACH 示例:

std::list<int> list_int( /*...*/ );
BOOST_FOREACH( int i, list_int )
{
    // do something with i
}

关于c++ - 多少 STL 是太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734217/

相关文章:

c - 在c中对齐相等是个好主意吗?

c++ - 运行时类型信息的奇怪行为

javascript - 在 Spidermonkey JS 引擎中异步调用回调函数

c++ - 以下 C++ 模板程序中的无效语句是什么?

javascript - jquery 滚动事件多次运行代码

delphi - 其他语言上的 ObjectPascal 标识符命名风格

c++ - 将 X Y 坐标转换为 Lat Long Equirectangular projecton C++

c++ - multimap 不排序

c++ - 在 C++ 中插入到映射值对中的 multimap

c++ - std::string 在 vi​​sual studio 上的具体行为?