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
을 의미합니까, 아니면 남은 항목이 있는지 항상 확인해야하는 사용자입니까?
귀하에게 달려 있습니다. nil 또는 공황 상태를 반환 할 수 있습니다. (나는 공황 상태에 빠지게하는 것이 적절하다고 말한다.) – JimB
더 깊게 가서 h.Swap()과 down() 메소드를 체크하면 한계를 확인한다 –
@YandryPozo -'if j1> = n || j1 <0 {// j1 <0 int overflow after'나는 이것이 약간 다르다고 생각합니다. 그리고'h.Swap()'은 기본'sort.Interface'에 의해 구현됩니다. –