c++ - 插入 vector 时使用 lambda 的返回值而不是函数的返回值有意义吗?

标签 c++ c++11 lambda

我正在尝试使用 lambda 进行频繁出现的 vector 插入,以防止调用等效函数:

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());
}

关于c++ - 插入 vector 时使用 lambda 的返回值而不是函数的返回值有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45400493/

相关文章:

C++错误,没有匹配的函数

c++ - 没有匹配的函数可以调用

c++ - vector 的初始化

python - 做 "[[' a', 2], ['b' ,1]] + [ ['b' , 2], ['c' , 1]] = [ ['b' , 3], ['a' , 2], 0x1045,67910"的任何 pythonic 方式?

c# - 如何在此 lambda 表达式中指定 "not in"?

c++ - 按下按钮期间没有事件捕获 [QT]

java - 如何释放字符**

c++ - 对于从 C++03 枚举到 C++11 枚举类的源向后兼容迁移,这种模式是否可行?

c++ - 在不知道函数参数的情况下使用 lambda 创建 std::function

c++ - 如何使用宏在 C++ 中嵌入调试语句