簡體   English   中英

在 vector.push_back() 導致重新分配之后,如何讓向量迭代器指向一個向量?

[英]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.

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