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

C++ How to handle the returned value of lambda expression used in for_each loop?

本文关键字:lambda 表达式 for 返回值 each 何处理 处理 循环 C++      更新时间:2023-10-16

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

而不是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;
});

您还可以使用后插入器,这样就不必预先分配输出矢量的大小。为了提高效率,最好将字符串作为 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");
});

虽然transform非常适合,但我认为值得一提的是,您可以以更命令/更少声明的方式将for_each硬塞进服务中。 如果您试图在学习C++的同时快速编写小问题的解决方案,那么学习这样做对应用程序级编程"流程"的破坏性可能小于在<algorithm>文档中挖掘。 数据处理逻辑是更重要的技能。

vector<string> names;
vector<string> results;
results.reserve(names.size());
for_each(names.begin(), names.end(),
    [](const string& name) {
        results.push_back(name + "some text");
    });
vector<pair<int,string>> vecpair;
vecpair.push_back(make_pair(1000,  "abc"));
vecpair.push_back(make_pair(1298,  "def"));

std::for_each(vecpair.begin(), vecpair.end(), 
    [&](pair<int,string>item){ sumStr+= " "+ item.second ; }    );

我尝试了上面的代码与增量表达式,似乎做了我想做的