我打算实施C++中的东西列表,其中的元素可能会被无序删除。我不指望我需要任何形式的随机访问(我只需要定期扫描列表),而且项目的顺序也不重要。C++迭代器的生命周期和有效性是什么?
所以我想到std::list<Thing*> with this->position = insert(lst.end(), thing)
应该做的伎俩。我希望Thing班级记住每个实例的位置,以便我可以在以后轻松地在一段时间内轻松完成lst.erase(this->position)
。但是,我仍然对C++ STL容器有点新鲜,而且我不知道如此长时间保持迭代器是否安全。尤其是,鉴于在插入Thing之前和之后将会删除其他元素。
好的答案,这也有助于了解可能导致向量重新分配的原因。 (插入一个元素是显而易见的,但是还有其他吗?) – Malabarba 2011-10-25 21:57:19
允许对矢量(包括插入和移除)的任何修改来重新分配和使迭代器失效;无论是否这样做都是实现定义的。所以最好假定以任何方式修改矢量总是使所有现有的迭代器无效。 – Miral 2012-02-02 07:32:43