簡體   English   中英

當ptr_vector迭代器失效時

[英]When ptr_vector iterators are invalidated

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

謝謝。

是。 boost::ptr_vector<T>文檔說明:

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()超過為其預留的元素數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM