让我们说我有一个矢量矢量:
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]).
不,它不会有任何发生:在大多数情况下,向量的实现是基于数组的(这几乎是向量的想法),尽管这在语言规范中并不是一成不变的。无论如何,向量的动态性质排除了数据结构中内联的任何形式的序列,即。由类管理的元素序列vector不能位于vector类内部,但必然是位于其他位置的一块内存,并且具有类中的指针。
因此,您的数据类型类似于指向动态数组的指针的动态数组。重新分配一个指向数组不会对指针数组产生影响。
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |