- slice基本操作
s=[:0]
清空切片s=[:2:3]
从切片或者数组引用指定长度和容量的切片
对于 s[i:l:c]
, i
是起始偏移的起始位置, l
是起始偏移长度的结束位置,c
是起始偏移的容量结束位置,那么s[i:l:c]
的长度和容量是怎么计算的呢?
- len:
l-i
为新切片的长度 - cap:
c-i
为新切片的容量
需要特别注意的是: i
l
c
并不是当前 slice
的索引,而是引用底层数组相对于当前 slice
起始位置的偏移量,所以可以超出当前 slice
的长度,但是不能超出当前 slice
的容量
- slice扩容策略
- 首先,如果新申请容量大于2倍的旧容量,最终容量为新申请的容量
- 其次,如果旧切片的长度小于1024,那么新切片的容量就是旧切片的两倍
- 再次,如果旧切片的长度大于等于1024,每次扩容最终容量将增加旧容量的1/4,直到最终容量大于新申请的容量
- 最后,如果最终容量值溢出,那么最终容量就是新申请容量