在 C++ 11 中遍历 STL 类

Iterating through STL classes in C++ 11

本文关键字:STL 遍历 C++      更新时间:2023-10-16

假设我们有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 循环仅计算一次结束条件。带有迭代器的经典循环在每次迭代时对其进行评估。基于范围的循环始终迭代整个容器。带有迭代器的经典循环只能迭代容器的一部分。范围循环语法更加简洁明了。

这些是我所看到的主要区别。