小智 7
甲std::vector<T>对象具有固定的和相当小的sizeof.它通常包含一个指向数组的指针,该数组T的长度(它的"容量"),以及当前使用了多少该数组(向量的逻辑大小).假设一个64位系统,这三个字段总计为8 + 8 + 8 = 24字节,那就是你的sizeof(vector<T>).请注意,无论是什么T(它可能是另一种矢量类型,或其他任何东西)以及矢量存储了多少元素,这都是相同的.当您创建向量(在此平台上)时,无论是作为局部变量还是作为数组元素或其他位置,您只能分配24个字节.在一些构造函数或向量的方法中,数组的分配是独立发生的.
容量确实是可变的(否则向量将没有用),但这没有问题,我们可以动态分配它并使我们的指针指向该分配.无论如何,vector对象仅包含指向实际存储的指针.
您仍然可以复制向量的原因,就好像它们确实包含任意数量的数据作为成员一样,它定义了它的构造函数和其他操作来解释该"外部"数组.例如,复制向量时,复制构造函数还会创建一个新数组,复制所有内容,并存储指向新数组的指针.用行话:每个向量都有其后备数组的唯一所有权.
因此,矢量矢量可能在内存中看起来像这样:
+--------+
| length |
|capacity|
| data | ----> +--------+
+--------+ | length |
|capacity|
| data | ----> ...
+--------+
| length |
|capacity|
| data | ----> ...
+--------+
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |