gpt4 book ai didi

c++ - vector push_back 对元素地址的影响

转载 作者:太空宇宙 更新时间:2023-11-04 14:55:44 28 4
gpt4 key购买 nike

我有一个类对象 vector 。一个函数随机选择两个元素并返回它们的地址。

现在使用这两个元素,我想生成两个相同类的新对象,并使用 push_back 将它们添加到 vector 中。

这里是两个父元素的地址:

这里没问题。然后生成第一个子对象,我使用 vector_pushback 将它添加到 vector 的末尾。问题是,执行 push_back 命令后,父对象的地址似乎发生了变化。这是 push_back 之后调试器的状态:

如您所见,地址显然保持不变,但它们似乎指向 push_back 之后的垃圾值。据我了解, push_back 在 vector 的末尾添加了一个元素。因此,我希望这 2 个元素的地址根本不会改变。

怎么了?

最佳答案

TL;DR 版本:

An insertion operation can invalidate any pointers, references or iterators to elements of a std::vector.

完整解释:

std::vector 有两个有用的指标:

  • size , 这是存储的元素数。
  • capacity ,这是它当前能够存储的元素数。

capacity >= size 在任何时候。

capacity 是内部动态分配数组的长度。* 当您插入一个元素时,size 递增 1。但是一旦它达到capacity,就必须分配一个新的、更大的数组(因此增加capacity)。这需要复制所有元素,并删除原始元素。所以他们所有的地址都改变了。


* 这是 std::vector 的典型内部实现。

关于c++ - vector push_back 对元素地址的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15511731/

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