第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

append() 是否總是擴(kuò)展所需的最小容量?

append() 是否總是擴(kuò)展所需的最小容量?

在學(xué)習(xí)切片時(shí),我有一個(gè)疑問(wèn):append() 是否總是擴(kuò)展所需的最小容量?a := make([]byte, 0)a = append(a, 1, 2, 3)cap(a) == 3  // will this be always true?// or the assumption may not hold since the underlying implementation of append()// is not specified.
查看完整描述

2 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

不,在這種情況下不能保證。該規(guī)范說(shuō):

append(s S, x ...T) S  // T is the element type of S

如果 s 的容量不足以容納附加值,則 append 分配一個(gè)新的、足夠大的切片,以適合現(xiàn)有切片元素和附加值。因此,返回的切片可能引用不同的底層數(shù)組。

(強(qiáng)調(diào)我的)

在你的情況,顯然任何容量> = 3是足夠大的,所以你可以依靠cap >= 3,但你不能依靠cap == 3

當(dāng)然,您可以假設(shè)在這種情況下上限不會(huì)是,例如 1e6 或 1e9 或 1e12。然而,精確的擴(kuò)大(分配新的后備數(shù)組)策略并沒(méi)有在每個(gè)細(xì)節(jié)中指定,以允許編譯器人員試驗(yàn)一些附加到此機(jī)制的旋鈕。


查看完整回答
反對(duì) 回復(fù) 2021-06-21
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

我要補(bǔ)充的是,它不僅不能保證切片的容量等于長(zhǎng)度,事實(shí)上,對(duì)于大長(zhǎng)度,幾乎永遠(yuǎn)不會(huì)出現(xiàn)結(jié)果切片的容量等于長(zhǎng)度的情況。

append()被提升為vector包的替代品。為此,追加的復(fù)雜度必須與vector包中的復(fù)雜度相匹配,這意味著追加元素必須具有分?jǐn)?O(1) 的復(fù)雜度。盡管在語(yǔ)言規(guī)范中沒(méi)有保證這種復(fù)雜性,但對(duì)于append()現(xiàn)在在 Go 社區(qū)中使用的模式來(lái)說(shuō),它必須有效地工作。

為了append()攤銷 O(1),它必須在每次空間用完時(shí)以當(dāng)前容量的固定百分比擴(kuò)展容量。例如,容量翻倍。想一想,如果每次用完容量翻倍,那么長(zhǎng)度和容量只有在長(zhǎng)度正好是2的冪(假設(shè)它開(kāi)始是2的冪)的情況下才能相同,這種情況并不常見(jiàn)。


查看完整回答
反對(duì) 回復(fù) 2021-06-21
  • 2 回答
  • 0 關(guān)注
  • 251 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)