c++ - C++ 迭代器的生命周期和有效性是多少?

标签 c++ stl iterator object-lifetime

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

所以我想到了 std::list<Thing*> with this->position = insert(lst.end(), thing) 应该可以解决问题。我希望 Thing 类记住每个实例的位置,以便以后可以轻松地执行 lst.erase(this->position) 在常数时间内。

但是,我对 C++ STL 容器还是有点陌生​​,我不知道将迭代器保存这么长时间是否安全。特别是考虑到在插入的 Thing 消失之前和之后还会有其他元素被删除。

最佳答案

在列表中,所有迭代器在插入期间保持有效,只有被删除元素的迭代器在删除期间无效。

在您的情况下,即使其他元素在插入的事物*之前和之后被删除,保留迭代器也应该没问题。

编辑:

vector 和 deque 的额外细节:

vector :

  • 插入 --- 所有迭代器得到 如果发生重新分配则无效, 否则有效。
  • erasing ---- 之后的所有迭代器 删除点无效。

双端队列:

  • 插入 --- 所有迭代器得到 无效。
  • erasing ----所有迭代器得到 无效。

关于c++ - C++ 迭代器的生命周期和有效性是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759274/

相关文章:

c++ - 指向索引处 vector 的指针与迭代器

c++ - std::map::find 的效率与值的数据大小有关吗?

c++ - 如何处理太长的 STL 模板错误报告?

c++ - 迭代器 - vector::iterator 和 array::iterator 的重载函数

c++ - 记录使用 createprocess 函数调用的 exe 的错误

c++ - c++ 中的遗传编程,库建议?

c# - 对于迭代器方法中的每个循环

c++ - 迭代器 VS const_iterator,与 distance() 一起使用

c++ - 从字符串中读取精度高达 6 的浮点值

c++ - 允许这种派生到基础转换的理由是什么(当它似乎违反 IS-A 时)?