【发布时间】:2014-10-04 11:56:27
【问题描述】:
我经常使用这种语法来循环std::map:
for( const auto& my_pair: my_map )
我可以安全地拨打my_map.erase( my_pair.first );吗?
【问题讨论】:
我经常使用这种语法来循环std::map:
for( const auto& my_pair: my_map )
我可以安全地拨打my_map.erase( my_pair.first );吗?
【问题讨论】:
不,它不安全。
my_map.erase( my_pair.first );
在这里,您使用键值调用 erase,这意味着您将删除具有该键值的所有元素。
当从std::map 中删除元素时,这适用:
对已擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。*
* http://en.cppreference.com/w/cpp/container/map/erase
因此,递增当前迭代器是不安全的,因为它可能已失效。
【讨论】: