Dynamic 是否在末尾添加动态数组?

Dynamic 是否在末尾添加动态数组?,dynamic,dynamic-arrays,Dynamic,Dynamic Arrays,从初始长度为4、numElements为0的动态数组开始,在末尾添加以下数字时显示该数组:5、19、4、6、-1 我收到的检查点答案是[5,19,4,6,-1,X,X,X],其中X表示可以忽略的条目 我有两个愚蠢的问题: 我以为在结尾插入会使它变成[X,X,X,5,19,4,6,-1],而不是现在答案中的样子 我最初认为,每次我们在数组中添加一些东西时,数组会自动将其长度加倍,这就是为什么我们在末尾有3个X,使总的结束长度为8,而不是初始大小4。这是正确的吗 它是这样工作的 在末尾添加意味着在数

从初始长度为4、numElements为0的动态数组开始,在末尾添加以下数字时显示该数组:5、19、4、6、-1

我收到的检查点答案是[5,19,4,6,-1,X,X,X],其中X表示可以忽略的条目

我有两个愚蠢的问题:

我以为在结尾插入会使它变成[X,X,X,5,19,4,6,-1],而不是现在答案中的样子

我最初认为,每次我们在数组中添加一些东西时,数组会自动将其长度加倍,这就是为什么我们在末尾有3个X,使总的结束长度为8,而不是初始大小4。这是正确的吗

它是这样工作的

在末尾添加意味着在数组末尾追加。让我们先做,不要担心内部问题

首先,列表是空的

[]
然后插入5

[5]
那么19

[5, 19]
然后是4,然后是6,然后是-1

[5, 19, 4]
[5, 19, 4, 6]
[5, 19, 4, 6, -1]
现在,当我们有容量为4的倍数的阵列时,这是什么样子的呢。正如你所说,当它们填满时,它们的大小会加倍。这就是进展:

X  X  X  X

5  X  X  X

5 19  X  X

5 19  4  X

5 19  4  6

5 19  4  6 -1  X  X  X
插入前4个元素时,4个元素块将填满。插入第5个元件时,我们没有空间,因此必须将容量加倍到8,然后将第5个元件放入第一个可用插槽中

因此,是的,您关于将容量增加一倍的说法是正确的。但是数组元素总是从一开始就用末尾未使用的插槽填充。如果将值放在末尾,则每次插入时都必须将其向左移动,这将非常低效