动态数组最后添加?

Dynamic array add at the end?

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

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

我有 2 个愚蠢的问题:

  1. 我认为在最后插入会使它成为 [X, X, X, 5, 19, 4, 6, -1] 而不是现在答案中的样子?

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

它是这样工作的。

"Adding at the end"表示追加到数组末尾。让我们先做吧,不用担心内部结构。

首先列表是空的

[]

然后你插入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个元素放入第一个可用的槽位。

所以是的,您关于将容量加倍的说法是正确的。但是数组元素总是从头开始填充,最后是未使用的槽。如果你把值放在最后,你将不得不在每次插入时将它们移到左边,这将是非常低效的。