如何在vector.push_back()导致重新分配后使向量迭代器指向向量?

时间:2011-06-11 07:30:56

标签: c++ vector iterator

我有一个函数void AddEntity(Entity* addtolist)将元素推回到vector,但由于当元素添加到vector时大小和容量相等,因此向量重新分配,{ {1}}无效。

然后,当我尝试增加迭代器时,由于迭代器无效而导致崩溃,因为iterator没有向重新分配的内存返回迭代器,我想知道如何解决这个问题。

我应该只使用push_back(...),因为它确实返回insert(...),或者我应该使用指针在重新分配后存储对向量的引用,然后让iterator等于指向重新分配的iterator的指针?

2 个答案:

答案 0 :(得分:6)

vector::push_back(const T& x);

在向量的末尾添加一个新元素,在其当前的最后一个元素之后。此新元素的内容初始化为x。

的副本

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

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

vector<int> myvector;

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

答案 1 :(得分:0)

正如@Als已经回答的那样,push_back()可能会在重定位发生时使所有迭代器无效。

根据您尝试解决的问题,std::list可能就是您所需要的。向list添加元素不会使容器的现有迭代器无效。