簡體   English   中英

在Golang追加的大O.

[英]Big O of append in Golang

Go的內置append功能的復雜性是什么? 使用+串字串聯怎么樣?

我想通過附加除了該元素之外的兩個切片來從切片中刪除元素,例如。 http://play.golang.org/p/RIR5fXq-Sf

nums := []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 我希望“reslicing”是一個恆定的時間操作。 我也希望使用+同樣適用於字符串連接。

這一切都取決於實際使用的實現,但我的基礎是標准的Go以及gccgo。

Reslicing意味着更改結構中的整數(切片是具有三個字段的結構:長度,容量和指向后備內存的指針)。

如果切片沒有足夠的容量,則追加將需要分配新內存並復制舊內存。 對於具有<1024個元素的切片,它將使容量加倍,對於具有> 1024個元素的切片,它將增加因子1.25。

字符串

由於字符串是不可變的,因此每個字符串與+串聯將創建一個新字符串,這意味着復制舊字符串。 因此,如果您在循環中進行N次,則將分配N個字符串並將內存復制N次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM