与for
循环相比,std::for_each
有什么优势吗?对我来说,std::for_each
似乎只是阻碍了代码的可读性。那么为什么一些编码标准推荐使用它呢?
发布于 2010-01-12 15:42:43
for_each
更通用。您可以使用它来迭代任何类型的容器(通过传入begin/end迭代器)。您可以在使用for_each
的函数下潜在地交换容器,而不必更新迭代代码。您需要考虑到除了std::vector
和普通的老式C数组之外,世界上还有其他容器,才能看到for_each
的优势。
for_each
的主要缺点是它需要一个函数器,因此语法很笨拙。通过引入lambda,这在C++11 (以前的C++0x)中得到了解决:
std::vector<int> container;
...
std::for_each(container.begin(), container.end(), [](int& i){
i+= 10;
});
3年后你就不会觉得奇怪了。
发布于 2010-01-12 16:20:13
就我个人而言,每当我需要使用std::for_each
(编写特殊用途的函数器/复杂的boost::lambda
)时,我发现BOOST_FOREACH
和C++0x的范围更清晰:
BOOST_FOREACH(Monster* m, monsters) {
if (m->has_plan())
m->act();
}
vs
std::for_each(monsters.begin(), monsters.end(),
if_then(bind(&Monster::has_plan, _1),
bind(&Monster::act, _1)));
发布于 2016-08-09 23:24:45
简单:当您已经有一个处理每个数组项的函数时,for_each
很有用,这样您就不必编写lambda了。当然,这是
for_each(a.begin(), a.end(), a_item_handler);
比
for(auto& item: a) {
a_item_handler(a);
}
而且,for_each
更加灵活,ranged for
循环只会从头到尾遍历整个容器。
https://stackoverflow.com/questions/2047414
复制相似问题