Go语言切片
切片可以传入三个参数,分别是[low, high, max]
,取元素就是从low开始,取high - low个数(等同于Java和Python),max - low的数作为新的切片的容量cap,可以不传max,当max不传时,容量默认和长度len相同。
即:新切片的len = high - low,cap = max - low
示例:
1 | func main() { |
注意:切片包头不包尾
视图
由数组执行切片所返回的对象是一个view
,即视图,若我们在视图上操作数组,会改变原数组
1 | func updateSlice(arr []int) { // 接收一个切片的view作为参数,而不是不限制长度的数组 |
补充:可以在view的基础上继续执行切片(slice),称为Reslice
slice的扩展
先看示例:
1 | func main() { |
对于切片,存在len()
和cap()
两个概念,len范围内的元素是可以直接获取到的,而超出的部分如果依然在cap的返回内可以通过拓展获取,如果超出cap的长度,则会报错
注意:slice可以向后扩展,不可以向前扩展
slice的操作
添加元素
1 | func main() { |
补充:slice如果append的长度超过了cap,那么底层会重新给他分配一个更大的数组
补充:由于值传递的原因,必须接受append的返回值
slice的创建
slice的默认值是nil,len为0,cap为0,cap每一次扩充大小都是乘以2
1 | func main() { |
slice的删除
删除某一下标的元素:
1 | func main() { |
删除分片的头元素:
1 | func main() { |
删除分片的末元素:
1 | func main() { |
slice的拷贝
copy()
内建函数在第一个参数的基础上,将第二个参数的元素加在其前面,第一个元素被修改
1 | func main() { |
切片和数组的区别
1 | func main() { |
结果为:
1 | 数组的长度:5,数组的容量:5 |