假设我有一个矢量矢量:
vector< vector<int> > table;
我知道如果没有足够的容量,矢量可以重新分配 我想知道如果我这样做,是否有可能重新分配vector table :
table[i].resize(1000);
table [i] 的重新分配是否也可以重新分配 table ?
答案 0 :(得分:6)
没有。这不会导致在table
中重新分配。
在table
上调用的唯一运算符/函数是[]
运算符,它承诺持续时间。如果重新分配发生,这将违反恒定的时间承诺。
您可以更改子向量(table[i]
s)的向量大小而无需在顶层向量中分配额外空间的原因是向量的存储通过指向a的指针进行管理记忆块。因此,增加矢量使用的元素数量实际上并不会改变矢量 object 的大小。
table[i].size()
更改而不更改sizeof(table[i])
。
答案 1 :(得分:4)
不,它不会有任何发生率:在大多数情况下,向量的实现基于数组(它几乎是向量的概念),尽管这在语言规范中并不是一成不变的。无论如何,向量的动态性质排除了数据结构中内联的任何形式的序列,即。由vector
类管理的元素序列不能在vector
类中,但必须是位于其他地方的内存块,在类中有一个指针。
因此,您的数据类型类似于动态数组的动态指针数组。重新分配一个指向的数组不会对指针数组产生影响。
答案 2 :(得分:1)
不,因为table
的内容未更改 - 它仍然包含与以前完全相同的实例。只需要重新分配table[i]
的存储空间。 vector
包含指向存储的指针 - 矢量对象的大小始终相同,只有引用的数组可以增大或缩小。因此,table [i]并没有增长,如果这就是你所要求的 - 只有它指向的数组。
答案 3 :(得分:1)
没有。调用vector
元素的方法不会影响vector
本身。
将此视为以下调用:parent_object.child_object.Method(),其中child_object对parent_object一无所知。 Method()不能改变parent_object的状态。
矢量矢量也是如此。 (从技术上讲,这里存储一个指向数组的指针数组。调整其中一个子数组是一个本地操作并更改相应的指针,但不会改变父数组的大小。)
答案 4 :(得分:1)
不,这不可能发生。 resize
不会更改向量对象的大小 - 它只会更改向量管理的动态存储空间。因此,从外部向量的角度来看,所有元素都保持不变(并且具有相同的小尺寸)。