【问题标题】:Safe to erase from map inside range based for? [duplicate]可以安全地从基于范围内的地图中擦除吗? [复制]
【发布时间】:2014-10-04 11:56:27
【问题描述】:

我经常使用这种语法来循环std::map

for( const auto& my_pair: my_map )

我可以安全地拨打my_map.erase( my_pair.first );吗?

【问题讨论】:

标签: c++ map foreach range


【解决方案1】:

不,它安全。

my_map.erase( my_pair.first );

在这里,您使用键值调用 erase,这意味着您将删除具有该键值的所有元素。

当从std::map 中删除元素时,这适用:

对已擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。*

* http://en.cppreference.com/w/cpp/container/map/erase

因此,递增当前迭代器是不安全的,因为它可能已失效。

【讨论】:

猜你喜欢
  • 2015-12-24
  • 2016-10-09
  • 1970-01-01
  • 2020-05-06
  • 2014-06-07
  • 2013-09-27
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多