我想a的内部std::vector是一对指向被占用内存的开始和结束的指针,以及一个指定属于向量的内存数组长度的整数.因此,交换两个相同大小的向量应该只需要3个内置类型的交换.
但是我几乎从不使用std::array,因此我不知道如何想象它的内部.直觉上,由于编译器已经知道数组的大小,因此不需要存储数组的末尾或预分配内存的大小,因此其内部应该只是1个指针.因此,成本应该只是1内置类型交换.
相反,文档说成本是元素数量的线性.为什么会这样?
小智 6
因为数组不是指针.它实际上是n个内联值.A std::array不为N个对象分配空间,它是 N个对象的空间,就好像它的成员value1, value2, value3, ...只保证没有填充(允许索引).你在考虑那个尚未假设的人std::dynarray.这两个对象:
std::array<T, 100> a;
std::dynarray<T> b;
Run Code Online (Sandbox Code Playgroud)
在内存中看起来像这样:
a: +-+-+-+-+-+
|T|T|T|...|
+-+-+-+-+-+
b: ptr ----------> +-+-+-+-+-+
|T|T|T|...|
+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |