wie kann ich einen Stack in C ++ effizient löschen?

7

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.

    
Misbah Ahmad 23.10.2016, 10:04
quelle

2 Antworten

12

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%     
v78 23.10.2016, 10:08
quelle
8

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:

  • Größe (oder Größe ändern)
  • leer
  • push_back
  • pop_back
  • zurück
  • löschen

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.

    
Elyasin 23.10.2016 10:27
quelle

Tags und Links