1

插入和/或删除元素是否有可能使现有元素的迭代器无效。

谢谢你。

4

1 回答 1

4

是的。状态的文档boost::ptr_vector<T>

Aptr_vector<T>是一个指针容器,它使用底层std::vector<void*>存储指针。

并且在 a 中插入元素或从 a 中删除元素std::vector会导致重新分配,因此现有的迭代器会失效。

具体来说,C++11 的第 23.3.6.5/3 节规定erase()

(3) 效果:在擦除点或擦除点之后使迭代器和引用无效。

关于insert()push_back()

(1) 备注:如果新容量大于旧容量,会导致重新分配。如果没有发生重新分配,则插入点之前的所有迭代器和引用仍然有效。

因此,为了防止在元素插入的情况下迭代器失效,您可以在reserve()从中获取任何迭代器之前使用该函数增加向量的容量。然后,这些迭代器将保持有效,直到size()向量的 超过为元素空间保留的数量。

于 2013-02-24T11:33:10.723 回答