切片的长度与容量
切片的长度与容量
切片拥有 长度 和 容量 。
切片的长度就是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。
你可以通过重新切片来扩展一个切片,给它提供足够的容量。试着修改示例程序中的切片操作,向外扩展它的容量,看看会发生什么。 package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // 截取切片使其长度为 0 s = s[:0] printSlice(s) // 拓展其长度 s = s[:4] printSlice(s) // 舍弃前两个值 s = s[2:] //关于为什么这样操作可以舍弃前两个值,因为切片可以说实际上就是指针,指针如果向后移动后想要看到原先的值是需要向后移动的,而切片是不支持向后移动的,所以这里取[2:]实际上就是舍弃了 0,1 两个位置的值 printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) } //结果 len=6 cap=6 [2 3 5 7 11 13] len=0 cap=6 [] len=4 cap=6 [2 3 5 7] len=2 cap=4 [5 7] //注意看,这里的cap值发生了变化,这是不可逆的,这里相当于引用了一个新的切片 len=2 cap=4 [5 7]
25
1 package
main 2 3 import
"fmt" 4 5 func
main () { 6
s :
[] int { 2 , 3 , 5 , 7 , 11 , 13 } 7
printSlice ( s ) 8 9
// 截取切片使其长度为 0 10
s
=
s [: 0 ] 11
printSlice ( s ) 12 13
// 拓展其长度 14
s
=
s [: 4 ] 15
printSlice ( s ) 16 17
// 舍弃前两个值 18
s
=
s [ 2 :] //关于为什么这样操作可以舍弃前两个值,因为切片可以说实际上就是指针,指针如果向后移动后想要看到原先的值是需要向后移动的,而切片是不支持向后移动的,所以这里取[2:]实际上就是舍弃了 0,1 两个位置的值 19
printSlice ( s ) 20 } 21 22 func
printSlice ( s [] int ) { 23
fmt . Printf ( "len=%d cap=%d %v\n" , len ( s ), cap ( s ), s ) 24 } 25 26 //结果 27 len
6
cap
6 [ 2
3
5
7
11
13 ] 28 len
0
cap
6 [] 29 len
4
cap
6 [ 2
3
5
7 ] 30 len
2
cap
4 [ 5
7 ] //注意看,这里的cap值发生了变化,这是不可逆的,这里相当于引用了一个新的切片 31 len
2
cap
4 [ 5
7 ]