我在這里閱讀 Go 標準庫中的優先級隊列,我正在查看這段代碼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}我有點擔心這種從優先級隊列中彈出元素的方法。我知道PriorityQueue在該示例中類型是指針的切片,并且切片是引用類型,因此old := *pq僅將引用分配給切片而不是實際上復制任何東西,但是這條線*pq = old[0 : n-1]有什么作用?它是創建另一個切片還是僅復制舊切片的引用,并將開始-結束索引設置為0and n-1?我想將此類用于可能包含大量項目的優先級隊列,并且我想避免不必要的副本。
去優先級隊列 - 分配一個子片
ibeautiful
2022-10-17 16:09:55