在container/heapgo的默认包中,有一个实现优先级队列的例子。
在查看示例代码时,它使用了一个切片[]*Item,并实现了heap.Interface.
我的问题是下面的一点。为什么某些函数将优先级队列声明为切片,有时将其声明为指向切片的指针?:
func (pq PriorityQueue) Swap(i, j int) {...}
// vs
func (pq *PriorityQueue) Push(x interface{}) {...}
为什么不总是这样(pq PriorityQueue)?在另一个关于指向切片的指针的 StackOverflow 线程上,文档说切片是引用类型,那么为什么要在它们上使用指针呢?我遇到了麻烦,因为官方文档说了些什么然后将两者混合在一起,而没有解释添加指针的意义。
感谢您的见解!
编辑:这是一个例子:
// original sample code from the docs:
func (pq *PriorityQueue) Push(x interface{}) {
n := len(*pq)
item := x.(*Item)
item.index = n
*pq = append(*pq, item)
}
// is this the same (removed pointers to slice) ?
func (pq PriorityQueue) Push(x interface{}) {
n := len(pq)
item := x.(*Item)
item.index = n
pq = append(pq, item)
}
如果两个函数相同,为什么现在使用指针?
慕斯王
相关分类