矢量向量是否可以重新分配,因为其中一个元素被重新分配?

Mar*_*sos 5 c++ stdvector

让我们说我有一个矢量矢量:

vector< vector<int> > table;
Run Code Online (Sandbox Code Playgroud)

我知道如果没有足够的容量,矢量可以重新分配.
我想知道如果我这样做,是否有可能重新分配向量表:

table[i].resize(1000);
Run Code Online (Sandbox Code Playgroud)

表[i]的重新分配是否也可能重新分配

小智 6

不会table.这不会导致重新分配.

调用的唯一操作符/函数table[]运算符,它承诺恒定的时间.如果重新分配发生,这将违反恒定的时间承诺.

您可以在table[i]不需要在顶层向量中分配额外空间的情况下更改子向量(s)的向量大小的原因是向量的存储通过指向内存块的指针进行管理.因此,增加向量使用的元素数量实际上并不会改变向量对象的大小.

table[i].size()变化而不改变sizeof(table[i]).


did*_*erc 4

不,它不会有任何发生:在大多数情况下,向量的实现是基于数组的(这几乎是向量的想法),尽管这在语言规范中并不是一成不变的。无论如何,向量的动态性质排除了数据结构中内联的任何形式的序列,即。由类管理的元素序列vector不能位于vector类内部,但必然是位于其他位置的一块内存,并且具有类中的指针。

因此,您的数据类型类似于指向动态数组的指针的动态数组。重新分配一个指向数组不会对指针数组产生影响。