我想象 std::vector
的内部是一对指针对,指向占用内存的开始和结束,以及一个整数 指定属于 vector 的内存数组的长度。因此,交换两个相同大小的 vector 应该只花费 3 个内置类型的交换。
但是我几乎从不使用 std::array
因此我不知道如何想象它的内部结构。直观地说,由于编译器已经知道数组的大小,因此无需存储数组的末尾或预分配内存的大小,因此其内部应该只是 1 个指针。因此成本应该只是 1 个内置类型交换。
相反,文档说成本是 linear in the number of elements .为什么会这样?
最佳答案
因为数组不是指针。它实际上是 n 个内联值。 std::array
不会在别处为 N 个对象分配空间,它是 N 个对象的空间,就好像它有成员 value1, value2, value3 , ...
只有保证没有填充(允许索引)。您想到的是目前还假设的 std::dynarray
。这两个对象:
std::array<T, 100> a;
std::dynarray<T> b;
在内存中是这样的:
a: +-+-+-+-+-+
|T|T|T|...|
+-+-+-+-+-+
b: ptr ----------> +-+-+-+-+-+
|T|T|T|...|
+-+-+-+-+-+
关于c++ - 交换两个 std::array<T, 100> 对象的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501885/