设为首页 加入收藏

TOP

slice扩容
2019-03-01 22:07:56 】 浏览:29
Tags:slice 扩容

1、当向切片新加入数据,原切片数据加上新数据长度不超过切片容量时,直接加入切片末尾,容量大小不变.

2、当加入新的数据后,数据长度超出原切片的容量大小2倍,则切片的容量会是数据长度(偶数)或数据长度(奇数)+1.

3、当加入新的数据后,数据长度未超出原切片的容量大小2倍,则切片的容量扩充一倍.

 1 package main
 2 
 3 import (
 4     "fmt"
 5 )
 6 
 7 func main() {
 8     var arr = [20]int{1, 2, 34, 5, 5, 5, 5, 667, 7}
 9     a1 := arr[:3:3]
10     a11 := arr[:3:3]
11 
12     fmt.Printf("cap(a1)=%d,len(a1)=%d\n", cap(a1), len(a1))
13 
14     var a2 = []int{1, 2, 2, 3}
15     a1 = append(a1, a2...) //总数据长度是7,容量扩容2倍装不下 2*3=6
16     //长度是数据长度7+1=8
17     //数据长度是奇数,容量为数据长度+1;
18     //数据长度是偶数,容量为数据长度
19     var a22 = []int{1, 2, 2, 3, 4}
20     a11 = append(a11, a22...)
21     fmt.Printf("cap(a1)=%d,len(a1)=%d\n", cap(a1), len(a1))
22     fmt.Printf("cap(a11)=%d,len(a11)=%d\n", cap(a11), len(a11))
23 
24     a3 := arr[:3:6] //容量6
25     fmt.Printf("cap(a3)=%d,len(a3)=%d\n", cap(a3), len(a3))
26 
27     a3 = append(a3, a2...) //总数据长度是7,容量扩容2倍可以装下 2*6=12
28     fmt.Printf("cap(a3)=%d,len(a3)=%d\n", cap(a3), len(a3))
29 
30 }

 

输出

cap(a1)=3,len(a1)=3

cap(a1)=8,len(a1)=7

cap(a11)=8,len(a11)=8

cap(a3)=6,len(a3)=3

cap(a3)=12,len(a3)=7


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Golang基础之函数 下一篇Golang之变量去哪儿

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }