6

假设我有一个向量向量:

vector< vector<int> > table;

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

table[i].resize(1000);

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

4

5 回答 5

6

不会。这不会导致table.

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

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

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

于 2013-04-14T22:09:31.830 回答
4

不,它不会有任何影响:在大多数情况下,向量的实现是基于数组的(这几乎是向量的概念),尽管这在语言规范中并没有一成不变。无论如何,向量的动态特性排除了数据结构中内联的任何形式的序列,即。类管理的元素序列vector不能在vector类内部,但必须是位于其他地方的一块内存,在类中有一个指针。

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

于 2013-04-14T22:16:52.127 回答
1

不,因为 的内容table没有改变 - 它仍然包含与以前完全相同的实例。只有存储table[i]需要重新分配。vector包含指向存储的指针 - 矢量对象的大小始终相同,只有引用的数组可以增长或缩小。因此, table[i] 没有增长,如果这就是你所问的 - 只有它指向的数组是。

于 2013-04-14T22:10:48.833 回答
1

不会。调用 avector元素的方法不会影响它vector本身。

将其视为以下调用:parent_object.child_object.Method(),其中 child_object 对 parent_object 一无所知。Method() 不能改变 parent_object 的状态。

向量的向量也是如此。(从技术上讲,这里存储了一个指向数组的指针数组。调整其中一个子数组的大小是一项本地操作,会更改相应的指针,但不会更改父数组的大小。)

于 2013-04-14T22:14:36.860 回答
1

不,这不可能发生。resize不会改变向量对象的大小——它只会改变向量管理的动态存储。因此,从外部向量的角度来看,所有元素都保持不变(并且具有相同的小尺寸)。

于 2013-04-14T22:17:18.887 回答