【发布时间】:2021-11-13 16:02:45
【问题描述】:
我有一个函数void AddEntity(Entity* addtolist) 将元素推回vector,但由于将元素添加到vector 时大小和容量相等,因此向量重新分配并且iterator 变得无效。
然后,当我尝试增加迭代器时,由于无效的迭代器而崩溃,因为push_back(...) 不会将迭代器返回到重新分配的内存中,我想知道如何解决这个问题。
我应该只使用insert(...),因为它确实返回iterator,还是应该使用一个指针来存储重新分配后对向量的引用,然后让iterator等于指向重新分配的指针vector?
【问题讨论】:
-
由于您使用的是向量,因此您可以只使用整数或 size_t 来自己跟踪索引!
-
为什么即使在
push_back之后还要使用以前的迭代器? -
@leetNightshade - 我很高兴我以外的其他人推荐了一次
size_t,但在这种情况下,正确的类型应该是std::vector<T>::size_type。 -
insert返回插入元素的迭代器。push_back没有,因为很明显新元素在哪里! -
@Chris Lutz - 哦,好的,谢谢!是的,我只提到 int 是因为有些人似乎热衷于使用它,但我倾向于坚持 size_t,所以我可以防止错误并利用 64 位平台,或者进一步利用其他平台,如 128 位等。所以,谢谢,我会记住这一点的。