我已经使用该container/heap包来实现优先级队列。不过有一件事让我很困扰。interface.Pop()如果堆为空,该方法的行为应该是什么?我没有看到文档中提到的任何内容,并且源代码似乎并不期待这种情况:
// Pop removes the minimum element (according to Less) from the heap
// and returns it. The complexity is O(log(n)) where n = h.Len().
// It is equivalent to Remove(h, 0).
//
func Pop(h Interface) interface{} {
n := h.Len() - 1
h.Swap(0, n)
down(h, 0, n)
return h.Pop()
}
显然,如果h.Len()是0这样,这不会很好地工作。这只是意味着panic还是用户希望始终检查是否还有任何物品?
幕布斯6054654
相关分类