当ptr_vector迭代器失效时

时间:2013-02-24 10:04:22

标签: c++ boost boost-ptr-container

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

谢谢。

1 个答案:

答案 0 :(得分:4)

是。 boost::ptr_vector<T>状态的documentation

  

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

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

具体来说,C ++ 11的§23.3.6.5/ 3陈述了erase()

  

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

以及insert()push_back()

  

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

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