首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++迭代器的生存期和有效性是什么?

C++迭代器的生存期和有效性是什么?
EN

Stack Overflow用户
提问于 2009-04-17 06:40:01
回答 2查看 4.9K关注 0票数 11

我计划在C++中实现一个项目列表,其中的元素可能会被删除。我不期望我会需要任何类型的随机访问(我只需要定期扫描列表),而且项目的顺序也不重要。

所以我认为std::list<Thing*> with this->position = insert(lst.end(), thing)应该能做到这一点。我希望Thing类记住每个实例的位置,以便以后可以在恒定时间内轻松地执行lst.erase(this->position)

但是,我对C++ STL容器还不太熟悉,我不知道在这么长的时间内保持迭代器是否安全。特别是,考虑到在插入的东西之前和之后会有其他元素被删除。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-17 06:52:50

在列表中,所有迭代器在插入时仍然有效,只有擦除元素的迭代器在擦除过程中无效。

在您的情况下,保持迭代器应该是很好的,即使在插入的东西之前和之后删除了其他元素。

编辑

关于矢量和缺陷的更多详细信息:

矢量:

  • 插入--如果发生重新分配,所有迭代器都无效,否则无效。
  • 擦除--擦除点后的所有迭代器无效。

德克

所有迭代器都得到invalid.

  • erasing --所有迭代器都无效。
票数 13
EN

Stack Overflow用户

发布于 2009-04-17 08:53:53

这取决于您使用的容器。

检查:http://www.sgi.com/tech/stl/

查看每个容器的最后文档,它们将描述迭代器保持有效的条件。

对于std::list<>,它们在所有条件下都是有效的,直到它们实际引用的元素从容器中移除(此时它们是无效的)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/759274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档