扩容过程中需不需要重新写入

参考解析

题目来源:腾讯

答案:

切片的扩容,
当在尾部扩容时,追加元素,不需要重新写入;

  1. var a []int
  2. a = append(a, 1)

在头部插入时;会引起内存的重分配,导致已有的元素全部重新写入;

  1. a = append([]int{0}, a...);

在中间插入时,会局部重新写入,如下:
使用链式操作在插入元素,在内层append函数中会创建一个临式切片,然后将a[i:]内容复制到新创建的临式切片中,再将临式切片追加至a[:i]中。

  1. a = append(a[:i], append([]int{x}, a[i:]...)...)
  2. a = append(a[:i], append([]int{1, 2, 3}, a[i:]...)...)//在第i个位置上插入切片