安全地从地图内擦除基于的范围
Safe to erase from map inside range based for?
我经常使用这种语法来遍历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 子>
因此,增加当前迭代器的值是不安全的,因为它可能已经无效了。
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 列出超出范围的擦除迭代器
- 矢量擦除范围内的元素
- 如何擦除矢量中的所有元素,但特定范围内最大的元素除外
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- 擦除范围从std :: vector删除向量的最佳方法
- 使用迭代器的矢量擦除特定索引(不基于范围或条件)
- 我们可以擦除c++11中基于循环的范围内的项目吗
- 范围外的矢量擦除迭代器
- 范围之外的矢量擦除迭代器
- 标准::矢量::擦除无效范围
- 从头到尾列出擦除范围
- C++ 映射擦除范围
- 使用矢量::擦除整个范围
- 用作 std::multimap 擦除范围的第一个和最后一个的递增迭代器
- 迭代器范围矢量构造或矢量擦除更快
- 安全地从地图内擦除基于的范围
- Iterator范围擦除元素