c++ - std::vector<std::vector<T>> 的迭代器有效性

标签 c++ vector stl iterator

在我的代码中,主要数据结构是

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/

相关文章:

c++ - 在 QtCreator 中是否有隐藏 clang 内联警告的选项?

c++ - 使用指针访问参数接收的结构中的元素时发生内存泄漏

c++ - C++ 中的模板 vector

c++ - 如何声明线程 vector

java - java中的函数比较 double 值以获得最大值

c++ - 随机访问至少 O(ln N) 且删除至少 O(ln N) 的数据结构 [不重复]

c++ - 获取模板,模板类型

c++ - 需要对结构容器中的字段进行总计

命名空间中的 C++ std vector 初始化

c++ - 如何在 C++ 中创建列表?