gpt4 book ai didi

C++ - 如何存储多维 vector ?

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

我有两个关于 vector 的问题。

  1. 假设我有一个多维 vector ,如下所示:-

    vector< vector<int> > A;

    然后 A[0] , A[1] , 等是 vector 。 vector 如何存储在 A 中?我 表示有关 vector 的信息A[0]A[1]存储在 A ? 并重新分配单个 vector 的内存,例如 A[2] 导致重新分配A还有吗?

  2. 其次,我尝试查看 vector 地址如何随着重新分配而变化。我使用了以下代码:-

代码:

vector<int> A;
int* x ;
int* y ;

vector<int>* ad;
vector<int>* bd;

for(int i = 0 ; i < 10000; i++){

A.push_back(i);
if(i == 2){
y = &A[0];
ad = &A;
}
x = &A[0];
bd = &A;

}

我发现,A 的地址即使 A[0] 的地址也不会改变变化。这是意料之中的,因为 vector 通过使用 new 在后台工作。和 delete .但我的问题是关于 vector 的多少信息(或哪些信息)存储在地址 &A 中。 (考虑到 &A 的地址不会改变)。这也是我对第一个问题的疑问。

我正在努力更好地理解 vector 在默认情况下是如何工作的。

最佳答案

how much information (or which information) about the vector is stored in the address &A

您假设 vector 的数据与 vector 对象本身分开存储是正确的——通常是在动态内存中。

vector 对象本身需要知道的三件事是

  • vector 数据的位置 - 我们需要它来执行 [] 运算符,
  • 当前分配的大小 - 我们需要它来知道何时增长数组,以及
  • 实际放入 vector 中的元素数量 - 我们需要它来知道在哪里push_back,以及从size()返回什么>.

不同的实现是可能的,在 vector 对象本身中存储尽可能少的单个指针。然而,一个典型的实现存储了一个指向已分配 block 开始的指针、一个指向已分配 block 事件部分末尾的指针和一个指向已分配 block 末尾的指针。

关于C++ - 如何存储多维 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679824/

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