go语言--切片的操作
接上篇切片的概念开始
//Slice添加元素
arr := [...]int{0,1,2,3,4,5,6,7}
s1 := arr[2:6]
s2 := s1[3:5]//[5 6]
s3 := append(s2,10)//[5 6 10]
s4 := append(s3,11)//[5 6 10 11]
s5 := append(s4,12)//[ 5 6 10 11 12],其中s4和s5被分配到一个新的array中
也就是说,添加元素是如果超越了cap,则系统会重新分配更大的底层数组,如果arr还有人用的话就会存在,如果没有使用的话则会被垃圾回收机制回收掉
同时由于值传递的关系,必须接受append的返回值,一般写成s = append(s,val)
Slice的创建
//1
var s []int //go语言每个变量一旦定义都一个zero value nil,此时s=nil(可以添加元素,go语言nil也不会崩溃)
//2
s1 := []int {2,4,6,8}
//3
s2 := make([]int,16)//len和cap都是16
s3 := make([]int,10,32)// len=10, cap=32
//4
copy(s2,s1)//拷贝,des=s2,source=s3,得到[2 4 6 8 0 0 0 0 0 0 0 0 0 0 0 0],len=16,cap=16
//5
s2 = append(s2[:3], s2[4:]...)//delete,跳掉下标为3的
//6
front := s2[0]//popping from front
s2 = s2[1:]//[4 6 0 0 0 0 0 0 0 0 0 0 0 0],len=14,cap=15
//7
tail := s2[len(s2) - 1]//popping from back
s2 = s2[:len(s2) - 1]//[4 6 0 0 0 0 0 0 0 0 0 0 0],len=13,cap=15