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

use*_*622 1 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;
});
Run Code Online (Sandbox Code Playgroud)

如何newName通过每次调用lambda表达式返回?

ron*_*chn 7

而不是for_each,你可能想要transform.

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;
});
Run Code Online (Sandbox Code Playgroud)

您也可以使用后插入器,这样就不必预先分配输出向量的大小.为了提高效率,将字符串作为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";
});
Run Code Online (Sandbox Code Playgroud)

如果使用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");
});
Run Code Online (Sandbox Code Playgroud)