【问题标题】:Does std::list's end() iterator position change when erasing?擦除时 std::list end() 迭代器位置是否改变?
【发布时间】:2013-06-24 11:48:24
【问题描述】:

在以下循环中,我使用的是预先计算的结束迭代器:

std::list::iterator end = MyList.end();

for (std::list::iterator it = MyList.begin(); it != end ;) 
    it = MyList.erase(it);

当擦除 std::list 中的元素时,MyList.end() 是否可以更改其值以使 end != MyList.end() 不再存在?

【问题讨论】:

  • 我没有尝试编辑已接受的答案以使其更全面,而是编辑了问题,所以它只是std::list。应该阅读每个容器的文档,了解它提供或不提供的失效保证的细节。
  • 一般情况下,不要保存end(),它只适用于部分容器,所以不要养成习惯。

标签: c++ iterator containers erase


【解决方案1】:

没有。

n3376 23.3.5.4

iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);

效果:仅使迭代器和对已擦除元素的引用无效。

【讨论】:

  • 为了完整起见,请记住,这适用于 std::list 和其他一些容器类型,但并非适用于所有容器类型(例如 std::vector)。
  • @ForEveR 搜索集/地图擦除 :)
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2021-05-08
  • 2016-02-12
  • 1970-01-01
  • 2012-10-16
相关资源
最近更新 更多