Ich habe das Paket container/heap
verwendet, um eine Prioritätswarteschlange zu implementieren. Eine Sache stört mich allerdings. Was sollte das Verhalten der interface.Pop()
-Methode sein, wenn der Heap leer ist? Ich sehe nichts in der Dokumentation erwähnt und der Quellcode scheint nicht, diese Situation zu erwarten:Container/Heap Pop() auf leeren Heap
// 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()
}
Klar, wenn h.Len()
ist 0
dies nicht gut funktionieren wird. Ist das einfach zu panic
gemeint oder wird der Benutzer erwartet, immer zu überprüfen, ob noch irgendwelche Gegenstände übrig sind?
Es liegt an Ihnen. Sie können entweder nil oder panic zurückgeben. (Ich würde sagen, es ist richtiger, es in Panik zu versetzen, anstatt den Benutzer einen Null-Rückgabewert erhalten zu lassen) – JimB
gehen Sie tiefer und überprüfen Sie die Methoden h.Swap() und down(), sie überprüfen die Grenzen –
@YandryPozo - 'if j1> = n || j1 <0 {// j1 <0 nach int Überlauf "Ich denke, das ist ein bisschen anders. Und 'h.Swap()' wird durch das zugrundeliegende 'sort.Interface' implementiert. –