亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Go中實現可調整大小的數組

如何在Go中實現可調整大小的數組

Go
守著一只汪 2021-04-08 16:15:41
我來自C ++背景,并且習慣于使用std::vector此類的東西。假設我想要這些的動態數組:type a struct {    b int    c string}這樣做的標準方法是什么?
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

使用append()內置


例子:


type mytype struct {

  a, b int

}


func main() {

  a := []mytype{mytype{1, 2}, mytype{3, 4}}

  a = append(a, mytype{5, 6})

}


查看完整回答
反對 回復 2021-04-26
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

Go Slice包含三個元素:數據,長度和容量。


s := make([]int, 0, 10)

變量s是一個整數切片,其長度為0,容量為10。內置的len()和cap()函數允許您獲取切片的長度和容量:


len(s) == 0

cap(s) == 10

要增加切片的長度,只需重新切片:


s = s[0:5]

// len(s) == 5

// cap(s) == 10

要減少長度,可以采用子切片:


s = s[0:1]

// len(s) == 1

有一些較短的方法可以調用make():


a := make([]int, 10) 

// len(a) == cap(a) == 10


b := make([]int)

// len(b) == cap(b) == 0

一切都很好,但是如果您需要將切片的長度增加到超出其容量,該怎么辦?為此,您需要分配一個新的片并將舊片的內容復制到新的片上。(函數“ copy”是另一個內置函數。)


t := make([]int, len(s), 20)

copy(t, s)

在有效圍棋文檔需要這個例子有點進一步,實現一個附加功能追加一個切片到另一個,調整其大小,如果必要的。


切片由數組支持;當make()一片特定容量的切片時,該容量的數組將在后臺分配。切片實際上成為該數組的“智能指針”。如果將該切片(或該切片的子切片)傳遞給另一個函數,則它將作為指向同一數組的指針傳遞。這使得子切片的創建非常便宜-昂貴的是后備陣列的分配。


Go標準庫包含許多容器軟件包(例如vector),從而無需手動管理切片。使用切片可以提高速度,而使用更精細的容器類可以更加方便。(也就是說,大多數情況下我仍然使用切片。)


您可能想知道為什么需要處理所有這些麻煩。畢竟,許多語言都提供動態調整大小的數組作為基元。這樣做的原因與Go的哲學息息相關。語言設計人員不會假定您知道適合您的程序的分配策略是什么;相反,它們為您提供了構建自己的數據結構所需的工具。


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 445 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號