我打算在C ++中实现一个Things列表,其中的元素可能会被无序删除。我不希望我需要任何类型的随机访问(我只需要定期扫描列表),项目的顺序也不重要。
所以我想到 std::list<Thing*> with this->position = insert(lst.end(), thing)
应该做的伎俩。我希望Thing类能够记住每个实例的位置,以便我以后可以在不变的时间内轻松地执行 lst.erase(this->position)
。
但是,我对C ++ STL容器仍然有点新意,我不知道保持迭代器这么长时间是否安全。特别是,考虑到在插入Thing之前和插入之后将删除其他元素。
答案 0 :(得分:13)
在列表中,所有迭代器在插入期间保持有效,并且只有擦除元素的迭代器在擦除期间无效。
在你的情况下,即使在插入Thing *之前和之后删除了其他元素,保持迭代器也应该没用。
修改强>:
vector and deque的其他详细信息:
Vector :
双端队列:
答案 1 :(得分:4)
这取决于您使用的容器。
检查:http://www.sgi.com/tech/stl/
查看最后的每个容器文档,它们将是对迭代器保持有效的条件的描述。
对于std :: list&lt;&gt;它们在所有条件下都保持有效,直到它们实际引用的元素从容器中删除(此时它们无效)。