我在这里阅读 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?
我想将此类用于可能包含大量项目的优先级队列,并且我想避免不必要的副本。
扬帆大鱼
相关分类