在调用具有多个参数的函数时使用std :: for_each

时间:2014-02-20 09:45:30

标签: c++ c++11

我进行了搜索,但是找到的最近的link甚至与我的问题不符。 我有一个std::vector<double> mydata数组。我喜欢在调用成员函数时使用for_each作为mydata数组。该成员函数接受两个参数。一个是mydata数组的每个元素,另一个是另一个数组的int*。我喜欢

::std::for_each (mydata.begin(), mydata.end(), train(net));

这给了我一个train函数的编译错误,不需要一个参数。如果没有int*,我知道如何使用for_each。

我的火车功能

void train(double const & data, int* d){}

我怎样才能让它发挥作用? 感谢

2 个答案:

答案 0 :(得分:5)

尝试使用lambda函数:

std::for_each (mydata.begin(), mydata.end(), [&](double d)
{
  train(d, net);
});

答案 1 :(得分:4)

如果你有C ++ 11,你可以使用std::bind

using namespace std::placeholders;  // For `_1`

std::for_each (mydata.begin(), mydata.end(),
               std::bind(&MyClass::train, this, _1, net));

这里将使用三个参数调用member-function:第一个是this指针,它始终是所有成员函数中隐藏的第一个参数。第二个参数是传递给std::bind创建的可调用对象的第一个参数,第三个参数是net变量。