使用STL算法的经典示例:
void foo(int){};
vector<int> collection;
collection.push_back(3);
collection.push_back(4);
... etc.
std::for_each(collection.begin(), collection.end(), bind(foo, _1));但是,如果我们有多个函数,需要使用相同的参数值来调用,该怎么办:
void bar(int){};
void beer(int){};
... etc.每次使用不同的函数重复for_each算法是不可取的。我需要更优雅的解决方案。
发布于 2011-10-09 03:20:45
既然你用C++11标记了问题,那么你可以这样使用lambda:
std::for_each(collection.begin(), collection.end(), [](int a)
{
bar(a);
beer(a);
});我记得C++11将std::begin和std::end作为自由函数,应该优先于成员函数:
std::for_each(std::begin(collection), std::end(collection), [](int a)
{
bar(a);
beer(a);
});之所以首选自由函数,是因为现在,例如,如果您将集合的类型更改为简单数组(例如,int collection[100]),那么上面的代码就可以很好地工作,而不需要更改任何字符。在新的标准C++中,自由函数的使用将比成员函数更统一。
或者,您可以使用基于范围的for循环,如下所示:
for(int a : collection)
{
bar(a);
beer(a);
}阿!它看起来更好。整洁干净,根本没有begin和end。
发布于 2011-10-09 03:19:52
这将是一个使用lambdas的好地方:
#include <vector>
#include <algorithm>
void bar(int){};
void beer(int){};
int main()
{
std::vector<int> collection;
collection.push_back(3);
collection.push_back(4);
std::for_each(collection.begin(), collection.end(),
[](int i) {bar(i); beer(i);});
}发布于 2011-10-09 03:18:34
也许是这样的吧?
void bunch_of_functions( int arg )
{
foo( arg );
bar( arg );
foobar( arg );
}
std::for_each(
collection.begin(), collection.end()
, bind(bunch_of_functions, _1)
);https://stackoverflow.com/questions/7699167
复制相似问题