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

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

在 Go 中重構(gòu)切片是一個(gè)恒定時(shí)間操作嗎?

在 Go 中重構(gòu)切片是一個(gè)恒定時(shí)間操作嗎?

Go
有只小跳蛙 2022-06-21 10:41:24
[x, y]我在 Go中有一個(gè)坐標(biāo)對(duì) ( ) 的 FIFO 隊(duì)列:type Copair [2]inttype Queue []Copairvar q = Queue{ ... preloaded values ... }API 定義如下,其中重要的部分是pop()函數(shù):func (q Queue) push(p Copair) {    q = append(q, p)}func (q Queue) pop() (error, Copair) {    if q != nil && len(q) >= 1 {        q = q[1:]        return nil, q[0]    } else {        return errors.New("index out of range [0]"), nil    }}在那q = q[1:]我正在重新構(gòu)建切片,理論上它應(yīng)該只需要在內(nèi)存中更改一個(gè)地址,因此是一個(gè)恒定時(shí)間的操作?,F(xiàn)在,我們正在逐漸丟失堆上的字節(jié)(或者誰(shuí)知道,Go 的逃逸分析可能足夠聰明,可以將它放在堆棧上),我希望垃圾收集器可以回收這些字節(jié)以避免內(nèi)存泄漏,最終我們將到達(dá)堆邊界,運(yùn)行時(shí)將不得不將整個(gè)隊(duì)列復(fù)制到其他地方,這肯定是線(xiàn)性時(shí)間操作。但...切片重構(gòu)是通過(guò)q = q[1:]恒定時(shí)間操作執(zhí)行的,還是與隊(duì)列大小成線(xiàn)性關(guān)系?如果(我懷疑)答案是 oh-so-very-Go “它取決于”,它依賴(lài)的條件是什么,是否有任何簡(jiǎn)單的經(jīng)驗(yàn)法則可以解決這個(gè)問(wèn)題?
查看完整描述

2 回答

?
楊__羊羊

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

切片是一個(gè)恒定時(shí)間的操作。切片頭包含指向底層數(shù)組、大小和容量的指針。該操作q:=q[1:]只需使用調(diào)整后的數(shù)組指針、大小和容量創(chuàng)建一個(gè)新標(biāo)頭。



查看完整回答
反對(duì) 回復(fù) 2022-06-21
?
慕標(biāo)5832272

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

q[1:]是一個(gè)切片表達(dá)式,它“無(wú)非”只是創(chuàng)建一個(gè)新的切片頭,即reflect.SliceHeader. 它只是 3 個(gè)整數(shù)值。

當(dāng)然會(huì)檢查索引范圍,例如,如果q切片為空,則會(huì)導(dǎo)致運(yùn)行時(shí)恐慌。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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