我经常使用这种语法来循环一个std::map:
for( const auto& my_pair: my_map )
Run Code Online (Sandbox Code Playgroud)
我可以my_map.erase( my_pair.first );安全地打电话吗?
不,这是不是安全的。
my_map.erase( my_pair.first );
Run Code Online (Sandbox Code Playgroud)
在这里,您使用erase键值进行调用,这意味着您将删除具有该键值的所有元素。
当从 a 中擦除元素时,std::map这适用:
对被擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。*
* http://en.cppreference.com/w/cpp/container/map/erase
因此,增加当前迭代器是不安全的,因为它可能已经失效。