c++ - 如何将 std::transform 与带有附加参数的 lambda 函数一起使用

标签 c++ c++11 vector lambda

在 C++ 11(或更高版本)中,我可以使用 std::transform 和 lambda 函数来转换还采用其他参数的 vector 吗?例如,如何将 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; });

std::transform 想要一个带有两个输入参数的函数。我需要使用 std::bind 吗?

最佳答案

你只需要在你的捕获列表中捕获参数:

transform(a.begin(), a.end(), b.begin(), std::back_inserter(c),
          [param](double x1, double x2) {return(x1 - x2)/param; });

通过引用捕获它也有效 - 如果 param 是一个大类,那将是正确的。但是对于双 param 是没问题的。

关于c++ - 如何将 std::transform 与带有附加参数的 lambda 函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53011875/

相关文章:

vector - 与 BTreeSet 相比,为什么使用 Vec 可以更快地找到整数集的交集?

C++ WINAPI 通过 GetProcAddress 调用导出函数

c++ - 为什么我不能在/usr/include 中安装boost?

python - python 的 GIL 是否会阻止在功能独立的 c++ 库中并行执行?

c++ - "warning: control reaches end of non-void function [-Wreturn-type]"是否有合理的修复?

c++ - 比较可变参数模板

c++ - 我如何获取指向通用引用的指针?

c++ - 访问列表 vector 中的结构

c++ - 使用 std::transform 转换 std::vector<struct{key; val;}> 到 std::map<key, val>

c++ - 多维 vector 概念 C++