我在這里閱讀 Go 標(biāo)準(zhǔn)庫(kù)中的優(yōu)先級(jí)隊(duì)列,我正在查看這段代碼func (pq *PriorityQueue) Pop() interface{} { old := *pq n := len(old) item := old[n-1] old[n-1] = nil // avoid memory leak item.index = -1 // for safety *pq = old[0 : n-1] return item}我有點(diǎn)擔(dān)心這種從優(yōu)先級(jí)隊(duì)列中彈出元素的方法。我知道PriorityQueue在該示例中類(lèi)型是指針的切片,并且切片是引用類(lèi)型,因此old := *pq僅將引用分配給切片而不是實(shí)際上復(fù)制任何東西,但是這條線*pq = old[0 : n-1]有什么作用?它是創(chuàng)建另一個(gè)切片還是僅復(fù)制舊切片的引用,并將開(kāi)始-結(jié)束索引設(shè)置為0and n-1?我想將此類(lèi)用于可能包含大量項(xiàng)目的優(yōu)先級(jí)隊(duì)列,并且我想避免不必要的副本。
去優(yōu)先級(jí)隊(duì)列 - 分配一個(gè)子片
ibeautiful
2022-10-17 16:09:55