在C ++ 11中迭代STL类

时间:2016-04-26 18:31:28

标签: c++ c++11 stl iterator

假设我们有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语法中就像第一个。

1 个答案:

答案 0 :(得分:-2)

使用基于范围的for循环仅评估结束条件一次。带迭代器的经典循环在每次迭代时对其进行求值。 基于范围的循环始终迭代整个容器。带迭代器的经典循环只能迭代容器的某些部分。 远程循环语法更简洁明了。

这是我看到的主要区别。