运行代码:
for (auto& v : vec)
v.erase(0, v.find("\n") + 1);
Run Code Online (Sandbox Code Playgroud)
做了什么:擦除所有内容直到第一个"\n"中的每个元素vec.
但是,运行代码:
std::for_each(vec.begin(), vec.end(), [&](std::string v) {
v.erase(0, v.find("\n") + 1);
});
Run Code Online (Sandbox Code Playgroud)
不删除任何元素vec.使lambda按值传递而不是-reference不会改变结果.
std::for_each(vec.begin(), vec.end(), [&](std::string v) {
^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
你是按价值来论证的.您稍后只处理副本,与容器中的原始对象无关.将lambda的参数更改为引用.同时删除捕获列表(因为您没有从当前范围捕获任何内容!).
Lambda的捕获列表和参数列表是两种不同的野兽.捕获当前范围的变量与通过lambda获取参数无关operator().
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |