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

标签 c++ arrays

我想象 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/

相关文章:

javascript - jquery 使用单选按钮和复选框切换数组列表

java - 使用java仅相对于第一行按升序对二维数组进行排序

android - 使用 Opencv 从 Android 中的 CameraGLSurfaceView 拍照

c++ - Visual Studio 编译并检测操作符重载,而 g++ 则不然

c++ - 在 C++ 中为 map 自动生成键

C++11 字符串属性和 gcc 版本

c++ - 如何使::WriteFile 在 UNICODE 环境下工作?

arrays - 为 'Array#fill' 提供 block 的实际优势

c - 使用 malloc 的 MPI 动态数组

改变数组的大小