And*_*w H 2 c++ lambda vector c++11
在C++ 11(或更高版本)中我可以使用std::transform和lambda函数来转换一个也采用其他参数的向量吗?例如,我如何传递param给下面的lambda函数?
std::vector<double> a{ 10.0, 11.0, 12.0 };
std::vector<double> b{ 20.0, 30.0, 40.0 };
std::vector<double> c;
double param = 1.5;
//The desired function is c = (a-b)/param   
transform(a.begin(), a.end(), b.begin(), std::back_inserter(c),
          [](double x1, double x2) {return(x1 - x2)/param; });
Run Code Online (Sandbox Code Playgroud)
std::transform想要一个带有两个输入参数的函数.我需要使用std::bind吗?
您只需要在捕获列表中捕获参数:
transform(a.begin(), a.end(), b.begin(), std::back_inserter(c),
          [param](double x1, double x2) {return(x1 - x2)/param; });
Run Code Online (Sandbox Code Playgroud)
通过引用捕获它也是有效的 - 如果param是一个大类,它将是正确的.但是对于双人param来说很好.
这就是lambda捕获的目的。您需要在lambda 的捕获块()中指定&或=或。  param[]
std::vector<double> a{ 10.0, 11.0, 12.0 };
std::vector<double> b{ 20.0, 30.0, 40.0 };
std::vector<double> c;
double param = 1.5;
//The desired function is c = (a-b)/param   
transform(a.begin(), a.end(), b.begin(), std::back_inserter(c),
          [=](double x1, double x2) {return(x1 - x2)/param; });
//         ^ capture all external variables used in the lambda by value
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们只是按值捕获,因为复制一个double并拥有一个引用在性能上几乎是相同的事情,并且我们不需要引用语义。