Ich habe einen C ++ Stack namens pages. Da ich keine clear () -Funktion habe, um einen Stack zu löschen, habe ich den folgenden Code geschrieben:
%Vor%Nun meine Frage: Gibt es eine bessere Möglichkeit, den Stack zu löschen? Danke im Voraus.
Im Allgemeinen können Sie in O (1) keine Kopierbehälter löschen, da Sie die Kopien zerstören müssen. Es ist denkbar, dass ein Template-Kopiercontainer eine teilweise Spezialisierung haben könnte, die in O (1) -Zeit gelöscht wurde, die durch ein Merkmal ausgelöst wurde, das den Typ der enthaltenen Objekte mit einem trivialen Destruktor angibt.
Wenn Sie Schleife vermeiden möchten.
%Vor%oder
%Vor% Ich glaube nicht, dass es einen effizienteren Weg gibt. Ein Stack ist ein klar definierter Datentyp, der speziell für den Einsatz in einem LIFO-Kontext entwickelt wurde und nicht dazu gedacht ist, auf einmal geleert zu werden.
Dazu könnten Sie vector
oder deque
(oder list
) verwenden, die im Grunde die zugrunde liegenden Container sind; a stack
ist tatsächlich ein Containeradapter. Weitere Informationen finden Sie in dieser C ++ - Referenz .
Wenn Sie keine Wahl haben, und Sie müssen Stack verwenden, dann ist nichts falsch mit der Art, wie Sie es tun. So oder so, die Elemente müssen zerstört werden, wenn sie konstruiert wurden, ob Sie nun einen neuen leeren Stapel zuweisen oder alle Elemente ausklappen oder was auch immer.
Ich schlage vor, stattdessen ein vector
zu verwenden; Es hat die Operationen, die du wirklich brauchst:
Es ist einfach bequemer, Sie können also die Methode clear
verwenden. Nicht sicher, ob vector
wirklich leistungsfähiger ist; die Stapeloperationen sind im Grunde die gleichen.
Tags und Links c++