有没有办法用带有多个参数的函数调用std :: transform

Blu*_*rin 7 c++

你好我有一个签名的功能

std :: string f(double x,double param1,double param2,double param3);

我想在std :: vector xvalues上为参数x调用它,使用std :: transform作为param1,param2和param3的特定值.

它相当于:

double param1(1.);
double param2(1.1);
double param3(1.2);
std::vector<std::string> results();
for (std::vector<double>::const_iterator it = xvalues.begin() ; it != xvalues.end() ; ++xvalues)
{
  results.push_back(f(*it, param1, param2, param3);
}
Run Code Online (Sandbox Code Playgroud)

如何以更优雅的方式完成?

亲切的问候托尼

ice*_*ime 16

您应该查看boost :: bind,它将允许您(如名称所示)为您的函数"绑定"参数f:

 std::transform([...], boost::bind(&f, _1, param1, param2, param3));
Run Code Online (Sandbox Code Playgroud)

这个绑定的结果是一个一元函数(_1是用于它应该与被称为参数的占位符):所有其他参数将是固定值param1,param2,param3.


Mat*_* M. 7

为了完整起见,C++ 0x版本,或者关于lambdas的大惊小怪

std::transform([...], [=](double i){ return f(i, param1, param2, param3); });
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,我在最近的许多文章中都知道这个。 (2认同)