关于删除slice中间元素的问题
来源:3-3 切片的操作

爱吃apple的阿狸
2020-07-22
根据老师的讲解,新建s1 slice 有5个元素, 新建s2 初始长度为16的slice
在copy之前我往s2里append了一个元素10
s1 := []int{2, 4, 6, 8, 10}
s2 := make([]int, 16)
s2 = append(s2, 10)
// 此时 s2 结果为 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10] len=17, cap=32
//再复制s1到s2里
copy(s2, s1)
//此时结果为 [2 4 6 8 10 0 0 0 0 0 0 0 0 0 0 0 10] len=17, cap=32
后面删除s2[4]元素10,
s2 = append(s2[:4], s2[5:]...)
printSlice(s2)
//结果为 [2 4 6 8 0 0 0 0 0 0 0 0 0 0 0 10] len=16, cap=32
以上都没啥问题,但是,当我 使用 s2[:32] 想扩展slice到32的时候
printSlice(s2[:32])
结果 [2 4 6 8 0 0 0 0 0 0 0 0 0 0 0 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] len=32, cap=32
怎么在中间多了一个10 ??!不应该后面cap都是0么? 难道删除中间元素有啥操作??望老师解答~
写回答
1回答
-
爱吃apple的阿狸
提问者
2020-07-26
明白了~删除中间元素,是拼接前后slice,后面的那部分通过apend覆盖了元素,然后修改长度len,所以最后那个10,是之前剩下的。
10
相似问题