go的且切片append後的len和cap的變化

2021-10-20 09:38:55 字數 430 閱讀 2248

這個是我看的最簡潔清晰也和實際符合的,還沒有看到原理部分

關於 cap 為何變為 6 的問題,我認為樓上解釋也不對,哈哈。

1、當同時新增多個元素時:

len(list)+len([params]) 為偶數:cap=len(list)+len([params])

len(list)+len([params]) 為奇數:cap=len(list)+len([params])+1

即 cap 始終為偶數。

2、當乙個乙個新增元素時:

len(list)+1<=cap:   cap=cap

len(list)+1>cap: cap=2*cap

即 cap 總是呈 2 倍的增加(也是偶數)。

以上規律是我觀察輸出後的個人總結,初學 go,沒查文件什麼的,總結的有問題還請樓下指出,嘿嘿。

Go語言的切片

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。在一定程度上可以看做乙個動態陣列 切片的方式 1.var identifier...

go 語言的陣列切片

建立陣列切片兩種方法 第一種是基與陣列,第二種是直接建立 1.第一種如下 定義乙個陣列 var myarray 10 int 10 int 基與myarray的前5個元素建立陣列切片 myslice myarray 5 基與從第5個元素開始的所有元素建立陣列切片 myslice myarray 5 ...

go切片的常用操作

首先我們應該知道go沒有引用型別只有值型別。那麼切片可以理解為乙個指標型別,切片的引數傳遞就是指標的值傳遞 sli int這個涉及到追加之後的擴容問題了。有點類似於c vector的擴容過程 初始化乙個大記憶體,但是不生成元素 sli make int,0,1000 len 0 cap 1000初始...