调用STL算法中的多个函数
calling more than one function in STL algorithm
使用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算法是不可选择的。我需要更优雅的解决方案。
既然您用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
。
这将是使用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);});
}
也许是这样的?
void bunch_of_functions( int arg )
{
foo( arg );
bar( arg );
foobar( arg );
}
std::for_each(
collection.begin(), collection.end()
, bind(bunch_of_functions, _1)
);
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 有没有办法捕获 STL 函数未被赋予正确参数的异常?
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 不能对类型化模板使用 STL 函数
- 如何使用 binary_search STL 函数在嵌套类中搜索整数?
- C++ 如何将参数传递给 STL 函数
- 如何将 STL 队列推送函数绑定到 std::函数?
- STL 函数和函数类型与函数指针类型
- 接受任何 STL 容器的函数
- 重载 STL 函数
- 为什么 stl 字符串C++函数有时出错有时会出错?
- 如何将元素从 STL 队列传递到函数?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- 为什么 STL 函数使用节点的颜色来计算 std::map 节点前身