C++ 如何处理循环中使用的 lambda 表达式for_each返回值
C++ How to handle the returned value of lambda expression used in for_each loop?
我正在学习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 ; } );
我尝试了上面的代码与增量表达式,似乎做了我想做的
相关文章:
- 这 4 个 lambda 表达式之间有什么区别?
- 使用成员在类中创建 lambda 表达式
- 将 lambda 表达式传递给 std::function in C++
- 在 lambda 表达式中使用 std::atomic
- &&对lambda表达式有什么好处?
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 列表.erase 中的 lambda 表达式
- 使用 lambda 表达式的 Raspbian G++ 8.3.0 导致 ']' 之前的预期主表达式 - 即使标准设置为 c++14
- 仅通过引用捕获的 lambda 表达式是否保证不会抛出?
- C++: priority_queue:模板参数中的 lambda 表达式
- 容器如何处理 lambda 表达式的参数
- 在C++ Lambda 表达式中,为什么人们更喜欢按值捕获而不是作为参数传递?
- 如何在 lambda 表达式中传递变量?
- 针对 std::function 的 lambda 表达式和模板推导:为什么会这样?
- 如何修改Lambda表达式以将输出放入文本文件
- C++如何使用lambda表达式来捕获上一次迭代的值
- 为什么Qt在信号和插槽中为lambda表达式抛出错误?
- C++:从捕获函数参数的函数返回 lambda 表达式
- C++ Lambda 表达式:通过 ref 开销捕获
- Qt 连接无法识别 lambda 表达式