C++如何处理for_each循环中使用的lambda表达式的返回值?

标签 c++ foreach lambda

我正在学习 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/

相关文章:

c++ - 我只能从一个文件访问静态 fstream

c++ - 如何构建高效的命名数组?

c++ - 通过模板类?

ForEach 和 GeometryReader : variable height for children?

c++ - C++0x lambda 的 undefined symbol ?

c++ - 2个范围的所有组合的迭代器

c# - 合并2个foreach循环(删除具有特定扩展名的文件)

Javascript 在 forEach 中使用 if 语句更改变量

java - 将 scala.Future 与 Java 8 lambda 一起使用

python - 类型错误 : string indices must be integers using pandas apply with lambda