C++ 插入向量时,使用lambda的返回值超过函数的返回值有意义吗?
我尝试将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,
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[&]
表示“从外部范围捕获对所需任何变量的引用”。请在此阅读: