声明:
1、var name []type / var name []type{}
==nil != nil
2、 make( []Type, size, cap )
!=nil
使用 make() 函数生成的切片一定发生了内存分配操作
切片是动态结构,只能与 nil 判定相等,不能互相判定相等
Go语言append()为切片添加元素:
var a []int
a = append(a,1)切片后面追加元素1 (两倍的扩容,扩容时重新分配地址)
a = append([]int{1},a...) 切片前面追加元素1 (追加就重新分配地址,效率比后面追加差很多)
a = append(a[:i],append([]int{x},a[i:]...)...) //在第i个位置插入x
a = append(a[:i],append([]int{1,2,3}, a[i:]...)...) //在第i个位置插入切片
Go语言从切片中删除元素:
从开头位置删除
a = []int{1, 2, 3}
直接移动数据指针:
a = a[1:] // 删除开头1个元素
a = a[N:] // 删除开头N个元素
不移动数据指针:
a = append(a[:0],a[1:]...)
a = append(a[:0],a[N:]...)
使用copy:
a = a[:copy(a,a[1:])]
a= a[:copy(a,a[N:])]
从中间位置删除
a = append(a[:i],a[i+1:]...)
a = a[:i+copy(a[i:],a[i+1:])]
从尾部删除(速度最快)
a = a[:len(a)-1]
a= a[:len(a)-N]