交换两个std :: array <T,100>对象的成本是多少?

Mar*_*dik 1 c++ arrays

我想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)