当ptr_vector迭代器失效时

When ptr_vector iterators are invalidated

本文关键字:失效 迭代器 vector ptr      更新时间:2023-10-16
插入

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

谢谢。

是的。boost::ptr_vector<T>的文档指出:

ptr_vector<T>是使用基础std::vector<void*>存储指针的指针容器。

std::vector中插入元素或从中删除元素可能会导致重新分配,从而使现有迭代器失效。

具体来说,C++11 的 §23.3.6.5/3 规定了关于erase()

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

关于insert()push_back()

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

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