2013-02-24 69 views

回答

4

是的。該documentationboost::ptr_vector<T>狀態:

ptr_vector<T>是使用底層std::vector<void*>存儲指針的指針容器。

將元素插入或刪除std::vector中的元素可能會導致重新分配,從而導致現有迭代器失效。

具體地說,§23.3.6.5/ 3的C++ 11個狀態約erase()

(3)電子FF學分:在或擦除的點之後失效迭代器和引用。

insert()push_back()

(1)備註:導致重新分配,如果新的尺寸比舊款更大的容量。如果沒有重新分配,插入點之前的所有迭代器和引用仍然有效。

因此,爲了防止迭代器失效在元件插入的情況下,可以使用的功能reserve()從它獲得任何迭代之前,以增加載體的容量。那些迭代器將保持有效,直到向量的size()超過爲空間保留的元素數量。