为什么C ++中的自动迭代无法对它指向的元素执行操作?

时间:2015-06-04 17:15:41

标签: c++11

由于对容器使用了MessageBoxW迭代,我只花了大约2来试图弄清楚我的代码中引入的错误。几天前我开始使用它,没有做太多的背景检查,只是因为我发现它更容易编写。

我有以下地图:auto,其中std::map<int, VectorList>只是VectorList

我想对typedef std::vector<double> VectorList的{​​{1}}执行.clear()操作。

我尝试了以下内容:

std::vector<double>

它不起作用。 VectorList没有执行明确的操作。但是,当我执行std::map<int, VectorList> map; for(auto elem : map) { elem.second.clear(); } 检查时,它会返回VectorList

然后我又回到了这个方法:

.empty()

一切都按预期工作。

问题:

为什么True迭代不按预期执行for(std::map<int, VectorList>::iterator elem = map.begin(); elem != map.end(); ++elem) { elem->second.clear(); } 操作?这可以通过auto迭代实现吗?

1 个答案:

答案 0 :(得分:3)

因为elem是按值创建的。如果要修改循环中的值,则使用引用循环:

for(auto& elem : map)