扩容过程中需不需要重新写入
参考解析
题目来源:腾讯
答案:
切片的扩容,
当在尾部扩容时,追加元素,不需要重新写入;
var a []int
a = append(a, 1)
在头部插入时;会引起内存的重分配,导致已有的元素全部重新写入;
a = append([]int{0}, a...);
在中间插入时,会局部重新写入,如下:
使用链式操作在插入元素,在内层append函数中会创建一个临式切片,然后将a[i:]内容复制到新创建的临式切片中,再将临式切片追加至a[:i]中。
a = append(a[:i], append([]int{x}, a[i:]...)...)
a = append(a[:i], append([]int{1, 2, 3}, a[i:]...)...)//在第i个位置上插入切片