我正在尝试使用lambda进行频繁发生的向量插入,以防止调用等效函数:
std::vector<vector<double>> A
// There are several loops like this with different conditions
for(auto i(0); i<100; ++i)
A.push_back(myFunction(
lots,
of,
parameters,
including,
index,
and,
condition
));
与此相比,lambda似乎相当优雅:
auto myLambda = [&](size_t loopIndex, double condition) -> vector<double> {
//body identical to that of myFunction
}
for(auto i(0); i<100; ++i)
A.push_back(myLambda(i, 3.141))
for(auto i(0); i<100; ++i)
A.push_back(myLambda(i, 42))
someFunction
的返回和主体与 lambda 的返回和主体相同。
这种方法有什么缺点吗? 与函数相比,lambda 的参数数量减少,这表明在移交数据时需要做的工作更少;实际情况是否如此,或者捕获是否相当于等量的工作量,我们只是获得了更好的可读性?
我认为这很有可读性,不是吗?
#include <vector>
std::vector<std::vector<double>> A;
void test()
{
// lots of logic here
auto compute = [&]() -> std::vector<double> {
// compute logic here
};
A.push_back(compute());
}