我计划用 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/