在我的代码中,主要数据结构是
std::vector<std::vector<T>> Worldlines ;
在我的一个子例程中,我删除元素并将其添加到其中一个组件(可能会导致容器重新分配以具有更多容量)(假设 Worldlines[i]
)。
如果我有一些T
在 vector Worldlines[i]
我将其位置保存为std::vector<T>::iterator
对象,如果Worldlines[i]
,它们通常可能会失效。已重新分配。
指向 T
的迭代器怎么样?属于 Worldlines[j]
与 j != i
?它们是否保证仍然有效,或者其中一个 vector 的重新分配可能会导致其他 vector 的重新分配,因为它们绑定(bind)在 vector 的 vector 中?
谢谢大家。
最佳答案
外部 vector 的所有迭代器(包括指向元素Worldlines[i]
的迭代器)均有效。您只需更改与元素 Worldlines[i]
位置相对应的迭代器所指向的对象的值即可。 vector 未重新分配,因为不需要重新分配的操作均未对该 vector 进行。
此外, vector 的所有元素的迭代器也是有效的,除了元素 Worldlines[i]
本身元素可能被重新分配的迭代器。
你可以想象这样的情况,就像你有一个指针数组(实际上 vector 的 vector 是动态分配的指针数组)。如果您更改了数组元素的某些指针的值,则数组本身不会重新分配,并且更改后的元素在数组中仍然具有相同的索引。:)
关于c++ - std::vector<std::vector<T>> 的迭代器有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892208/