【发布时间】:2019-03-31 09:36:10
【问题描述】:
在 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; });
std::transform 想要一个有两个输入参数的函数。我需要使用std::bind吗?
【问题讨论】:
-
永远不需要使用
std::bind。 Lambdas 可以做所有bind可以做的事情,甚至更多。它真的应该被弃用并最终被删除。 -
@JesperJuhl 我认为至少有一个极端情况
bind可以而 lambdas 不能,不记得它是什么,我自己也从未遇到过,所以我只坚持“Lambdas can do everything”; ) -
@user463035818 有一个详细的边缘案例here
-
@JesperJuhl:我也不会弃用
std::bind,只要 open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0573r0.html(缩写 lambdas)未获批准。 Lambda 目前带有很多语法噪音,有些人可能认为std::bind在某些用例中更易于阅读。 -
@NathanOliver 谢谢你的链接。今天学到了一些新东西。