如果您有vector
并将vector
分配给另一个vector
,则会逐个复制元素,您将获得两个相同的副本。
当您移动vector
到另一个vector
时,整个内部阵列立即被盗。元素不会逐个移动。
移动时,将std::array
分配给另一个std::array
元素,逐个移动到新数组。
为什么std::array
不执行矢量操作,一次盗取整个内部数组而不是逐个移动元素?
答案 0 :(得分:2)
std::array
的基本观点是它的内容纯粹是一个内置的数组对象,该类提供语法糖,但不会增加数据表示的开销(根本)。
vector
通常由至少包含三个项目的结构组成:
当您移动vector
时,您基本上只能“偷”"这三项,无需复制数据本身的内容。最终得到一个包含指向相同数据的指针的新结构。
使用std::array
消除了指向数据的指针,这意味着只需复制指针就无法移动内容。
答案 1 :(得分:1)
std::vector
分配和管理数组。 std::array
是一个数组。你不能再偷窃"偷窃"来自std::array
的数组比你可以"盗窃"来自int
的整数。
答案 2 :(得分:1)
因为没有“内部”数组。 std::array
是数组,没有单独的指针可以像vector
一样转让所有权。每个数组都是 N
元素的内存,它们无法交换。
答案 3 :(得分:0)
不同之处在于,一个容器(vector
)包含指向数据缓冲区的指针,而std::array
包含数据本身。创建具有成员int arr[100]
的类和创建具有成员int* arr
的类之间的区别。你可以更有效地移动"具有单个int*
到缓冲区的类,而不是复制100个成员的数组。