由于对容器使用了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
迭代实现吗?
答案 0 :(得分:3)
因为elem
是按值创建的。如果要修改循环中的值,则使用引用循环:
for(auto& elem : map)