我计划在C++中实现一个项目列表,其中的元素可能会被删除。我不期望我会需要任何类型的随机访问(我只需要定期扫描列表),而且项目的顺序也不重要。
所以我认为std::list<Thing*> with this->position = insert(lst.end(), thing)
应该能做到这一点。我希望Thing类记住每个实例的位置,以便以后可以在恒定时间内轻松地执行lst.erase(this->position)
。
但是,我对C++ STL容器还不太熟悉,我不知道在这么长的时间内保持迭代器是否安全。特别是,考虑到在插入的东西之前和之后会有其他元素被删除。
发布于 2009-04-16 22:52:50
在列表中,所有迭代器在插入时仍然有效,只有擦除元素的迭代器在擦除过程中无效。
在您的情况下,保持迭代器应该是很好的,即使在插入的东西之前和之后删除了其他元素。
编辑
关于矢量和缺陷的更多详细信息:
矢量:
。
德克
所有迭代器都得到invalid.
发布于 2009-04-17 00:53:53
这取决于您使用的容器。
检查:http://www.sgi.com/tech/stl/
查看每个容器的最后文档,它们将描述迭代器保持有效的条件。
对于std::list<>,它们在所有条件下都是有效的,直到它们实际引用的元素从容器中移除(此时它们是无效的)。
https://stackoverflow.com/questions/759274
复制