它如何奏效Swift阵列能力的增加



我在苹果文档中阅读:

"当您将元素添加到数组中并且该数组开始超过其保留容量时,该数组会分配较大的内存区域并将其元素复制到新存储中。新存储是旧存储的倍数。"

所以,我打开了操场并创建了一些示例。第一个示例似乎正确:

var array = [1, 2, 3, 4, 5]
array.capacity //5
array.append(contentsOf: [6, 7, 8, 9, 10])
array.capacity //10
array.append(11)
array.capacity //20

,但我不明白第二个示例:

var array = [1, 2, 3, 4, 5]
array.capacity //5
array.append(contentsOf: [6, 7, 8, 9, 10, 11])
array.capacity //12
array.append(12)
array.capacity //12

为什么在第二个示例中容量 12 ?我什至不明白在Google中阅读文档和搜索。

我建议您在此处检查Rob和Matt的答案

即使有 reserveCapacity函数,也不是

来自文档:

数组类型的附录( :) and Append(contents of :)方法为您处理此细节,但是ReserveCapacity( :)仅分配与您告诉它一样多的空间(填充到一个圆形值(,不再是。这避免了过度分配,但可能导致插入没有摊销的恒定时间性能。

最新更新