Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 插入向量时,使用lambda的返回值超过函数的返回值有意义吗?_C++_C++11_Lambda - Fatal编程技术网

C++ 插入向量时,使用lambda的返回值超过函数的返回值有意义吗?

C++ 插入向量时,使用lambda的返回值超过函数的返回值有意义吗?,c++,c++11,lambda,C++,C++11,Lambda,我尝试将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,

我尝试将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
                          ));
std::向量A
//有几个这样的循环,条件不同
对于(自动i(0);i向量{
//主体与myFunction的主体相同
}

对于(自动i(0);i我认为这是相当可读的,不是吗

#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());
}
#包括
std::载体A;
无效测试()
{
//这里有很多逻辑
自动计算=[&]()->std::vector{
//在这里计算逻辑
};
A.向后推(compute());
}

我认为这很容易理解,不是吗

#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());
}
#包括
std::载体A;
无效测试()
{
//这里有很多逻辑
自动计算=[&]()->std::vector{
//在这里计算逻辑
};
A.向后推(compute());
}


我想你应该在关闭lambda的
}
后添加一个额外的
()
来调用它。@VTT:谢谢,我的错!代码必须被塞进
push_back
调用吗?为什么不
/*在变量V*/a.push_back(V)中准备一个向量
@IgorTandetnik:我不知道下面理查德的答案中的lambda的“命名”是可能的;)是的。或者你可以通过
emplace\u back
将元素直接构造成
a
。或者你可以
推回
一个空向量,通过
back()获取对它的引用
,然后填充它。最好的方法取决于这里的
计算逻辑的细节
我想你应该添加一个额外的
()
在关闭lambda的
}
后调用它。@VTT:谢谢,我的错!代码必须被塞进
push_back
调用中吗?为什么不
/*在变量V*/a中准备一个向量。push_back(V);
@IgorTandetnik:我不知道在Richard下面的回答中对lambda进行“命名”是可能的;)是的。或者您可以通过
emplace\u back
将一个元素直接构建到
A
中。或者您可以
推回一个空向量,通过
back()
获取对它的引用,然后填充它。最好的方法取决于这里的
计算逻辑的细节
哇,我甚至不知道这是可能的:)但是与普通函数调用相比,这还有什么影响吗?@mrclng lambda只是创建函数对象实例的简写。但是如果你从
计算中更改内容,这仍然有效吗逻辑
在lambda定义之后?也就是说,捕获的变量是否会反映lambdas定义时点或其调用时点的变量?@mrclng
[&]
表示“从外部范围捕获对所需任何变量的引用”。在这里读一读:哇,我甚至不知道这是可能的:)但是与普通函数调用相比,这有任何其他影响吗?@mrclng lambda只是创建函数对象实例的简写。但是如果你在lambda定义之后更改
计算逻辑
,这仍然有效吗?也就是说,捕获的变量是否会反映lambdas定义时点或其调用时点的变量?@mrclng
[&]
表示“从外部范围捕获对所需任何变量的引用”。请在此阅读: