欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

slice扩容

程序员文章站 2023-03-30 22:32:29
1、当向切片新加入数据,原切片数据加上新数据长度不超过切片容量时,直接加入切片末尾,容量大小不变. 2、当加入新的数据后,数据长度超出原切片的容量大小2倍,则切片的容量会是数据长度(偶数)或数据长度(奇数)+1. 3、当加入新的数据后,数据长度未超出原切片的容量大小2倍,则切片的容量扩充一倍. ca ......

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