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

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

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

有帮助吗?

解决方案

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

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

编辑:

矢量和双端队列的其他详细信息:

向量:

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

双端队列:

  • 插入---所有迭代器都无效。
  • 擦除----所有迭代器都无效。

其他提示

这取决于所使用的容器上。

检查: http://www.sgi.com/tech/stl/ 点击 看在端部每个容器文档其将在该迭代留下有效的条件的描述。

有关的std ::列表<>,直到它们实际上是指该元素是从容器中取出(在这一点上它们是无效的)它们保持所有条件下有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top