gpt4 book ai didi

c++ - 在 vector.push_back() 导致重新分配后如何让 vector 迭代器指向 vector ?

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:20 25 4
gpt4 key购买 nike

我有一个函数 void AddEntity(Entity* addtolist) 将元素推回到 vector 但是因为当元素被添加到vector,vector 重新分配,iterator 变为无效。

然后,当我尝试增加迭代器时,由于迭代器无效,我遇到了崩溃,因为 push_back(...) 没有将迭代器返回到重新分配的内存,我想知道如何解决这个问题。

我应该只使用 insert(...) 因为它确实返回一个 iterator,还是我应该使用一个指针来存储对重新分配后的 vector 的引用然后让 iterator 等于指向重新分配的 vector 的指针?

最佳答案

vector::push_back(const T& x);

在 vector 的末尾添加一个新元素,在其当前最后一个元素之后。这个新元素的内容被初始化为 x 的拷贝。

这有效地将 vector size 增加了 1,如果在调用之前 vector 大小等于 vector 容量,这会导致重新分配内部分配的存储空间。 重新分配会使之前获得的所有迭代器、引用和指针失效。

使用无效 vector 将导致崩溃或未定义的行为。
所以只需使用 vector::begin() 获得一个新的迭代器。

vector<int> myvector;

vector<int>::iterator it;
it=myvector.begin()

关于c++ - 在 vector.push_back() 导致重新分配后如何让 vector 迭代器指向 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6314718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com