gpt4 book ai didi

结构内部的c++ vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:42 24 4
gpt4 key购买 nike

我对使用 std::vector 有疑问。如果我得到一个带有 std::vector 对象的结构,在内存中有未定义的空间,如果它需要重新分配(std::vector),是结构还重新分配?还是只有 std::vector

例如:

struct cluster{
int a;
int b;
struct cluster* parent;
vector<struct cluster> children;
}

struct cluster obj = {2,1,...};

struct cluster *pobj = &obj;

for(int i = 0; i < 100 ; i ++){
children.push_back(i); //The capacity will be increased progressly, no?
}

所以,问题是:pobj==&obj 是否在 for 循环的末尾?或者 obj 是否因为子 std::vector 对象的重新分配而重新分配?

我希望我解释了我的疑问。感谢您的宝贵时间。

最佳答案

不,您的 obj 变量永远不会重新分配,因为其中的成员会发生变化。 vector 有自己的数据指针,并在内部处理自己的所有分配和重新分配。

这样想:通常局部变量(包括完整的结构和数组)放在当前函数的堆栈上。编译器通过基地址的偏移量访问这些变量。如果编译器(或系统)突然开始在内存中四处移动变量,这将使变量访问变得相当复杂化,并且还会极大地影响程序的运行时速度和效率。所以局部变量在堆栈上,并停留在编译器放置它们的位置。堆上分配的数据(如 std::vector 中的数据)可以轻松移动,因为所有这些都必须在指向数据的指针中更新,就像我在处理之前所说的那样在 vector 对象内部,所以无论如何您都不会注意到。

关于结构内部的c++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18205462/

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