gpt4 book ai didi

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

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

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

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 完成。

除了元素 Worldlines[i] 本身的元素可能被重新分配的元素的迭代器之外, vector 的所有元素的迭代器也是有效的。

你可以把这种情况想象成你有一个指针数组(实际上 vector 的 vector 是一个动态分配的指针数组)。如果您更改了数组元素的某个指针的值,则数组本身不会重新分配,并且更改后的元素在数组中仍然具有相同的索引。:)

关于c++ - std::vector<std::vector<T>> 的迭代器有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892208/

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