[英]How to get a vector iterator to point to a vector after vector.push_back() has caused reallocation?
我有一個 function void AddEntity(Entity* addtolist)
將元素推回vector
,但由於將元素添加到vector
時大小和容量相等,因此向量重新分配並且iterator
變得無效。
然后,當我嘗試增加迭代器時,由於無效的迭代器而崩潰,因為push_back(...)
不會將迭代器返回到重新分配的 memory 我想知道如何解決這個問題。
我應該只使用insert(...)
,因為它確實返回了一個iterator
,還是應該使用一個指針來存儲重新分配后對向量的引用,然后讓iterator
等於指向重新分配的vector
的指針?
vector::push_back(const T& x);
在當前最后一個元素之后,在向量的末尾添加一個新元素。 這個新元素的內容被初始化為 x 的副本。
這有效地將向量size
增加一,如果向量大小等於調用前的向量容量,則會導致內部分配的存儲重新分配。 重新分配使所有先前獲得的迭代器、引用和指針失效。
使用無效的向量會導致崩潰或未定義的行為。
所以只需使用vector::begin()
獲得一個新的迭代器。
vector<int> myvector;
vector<int>::iterator it;
it=myvector.begin()
正如@Als 已經回答的那樣,如果發生重定位, push_back()
可能會使所有迭代器無效。
根據您嘗試解決的問題, std::list
可能是您需要的。 將元素添加到list
不會使容器的現有迭代器無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.