我正在学习 lambda 表达式,我想知道如何使用或访问 for_each 循环中使用的 lambda 表达式返回的值。
例如,假设我有以下内容:
vector<string> names;
for_each(names.begin(), names.end(),
[](string aName) -> string {
string newName = aName + "some text";
return newName;
});
如何获取每次调用 lambda 表达式返回的 newName
?
最佳答案
您可能想要transform
,而不是for_each
。
vector<string> names;
vector<string> output(names.size());
transform(names.begin(), names.end(), output.begin(),
[](string aName) -> string {
string newName = aName + "some text";
return newName;
});
您还可以使用后插入器,这样您就不必预先分配输出 vector 的大小。为了提高效率,最好也将字符串作为 const& 传递:
std::vector<std::string> names;
std::vector<std::string> output;
output.reserve(names.size());
std::transform(names.begin(), names.end(), std::back_inserter(output),
[](const std::string& aName) -> std::string {
return aName + "some text";
});
如果使用for_each
,则需要通过引用捕获输出容器:
std::vector<std::string> names;
std::vector<std::string> output;
output.reserve(names.size());
std::for_each(names.begin(), names.end(),
[&output](const std::string& aName) {
output.push_back(aName + "some text");
});
关于C++如何处理for_each循环中使用的lambda表达式的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33048543/