我经常使用这种语法循环遍历std::map
:
for( const auto& my_pair: my_map )
我可以安全地致电my_map.erase( my_pair.first );
吗?
答案 0 :(得分:3)
不,不安全。
my_map.erase( my_pair.first );
在这里,您使用键值调用erase
,这意味着您将删除具有该键值的所有元素。
当从std::map
中删除元素时,这适用:
擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。*
* http://en.cppreference.com/w/cpp/container/map/erase
因此,增加当前迭代器是不安全的,因为它可能已经失效。