【发布时间】:2016-04-26 18:31:27
【问题描述】:
假设我们有 std::map 并且我们想要迭代。这两次迭代之间有什么优点/缺点(或主要区别是什么)?
map<string,int> m0 { { "name1", 20 }, { "name2", 30 }, { "name3", 40 } };
for( auto &it : m0 )
it = m0 . erase( it );
和
for (auto it=m0.begin(); it!=m0.end(); )
it = m0.erase(it);
第一个代码不兼容,我不知道为什么,尽管在 cppreference 中的语法与第一个类似。
【问题讨论】:
-
for( auto &it : m0 )-- 尽管您将变量命名为“it”,但它实际上并不是一个迭代器,而是对映射元素的引用。 -
第一个在循环中没有给你一个迭代器,它给你一个元素引用。你不能用它来删除。
-
m0.clear();有什么问题?