Go 內置append函數的復雜度是多少?字符串連接如何使用+?我想通過添加不包括該元素的兩個切片來從切片中刪除一個元素,例如。http://play.golang.org/p/RIR5fXq-Sfnums := []int{0, 1, 2, 3, 4, 5, 6, 7}fmt.Println(append(nums[:4], nums[5:]...))=> [0 1 2 3 5 6 7]http://golang.org/pkg/builtin/#append表示如果目的地有足夠的容量,那么該切片是resliced. 我希望“重新切片”是一個恒定的時間操作。我也希望同樣適用于使用+.
1 回答

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
這一切都取決于所使用的實際實現,但我基于標準 Go 和 gccgo。
切片
重新切片意味著更改結構中的整數(切片是具有三個字段的結構:長度、容量和指向后備內存的指針)。
如果切片沒有足夠的容量,則 append 將需要分配新內存并復制舊內存。對于 <1024 個元素的切片,它將使容量加倍,對于具有 >1024 個元素的切片,它將增加 1.25 倍。
字符串
由于字符串是不可變的,每個字符串連接+
都會創建一個新字符串,這意味著復制舊字符串。因此,如果您在循環中執行 N 次,您將分配 N 個字符串并復制 N 次左右的內存。
- 1 回答
- 0 關注
- 218 瀏覽
添加回答
舉報
0/150
提交
取消