Ich könnte immer ein Array verwenden und einen Algorithmus schreiben, um Elemente nach oben zu schieben, aber ein Stack wäre wahrscheinlich effizienter und einfacher später zu verwenden. Ich habe nach dieser Funktion gesucht und konnte keine finden.Gibt es eine Funktion, die am Ende eines C++ - Stacks hinzugefügt werden soll?
Antwort
std::stack
ist ein Containeradapter, kein Container selbst. Das bedeutet, es erzwingt einfach eine Stapelschnittstelle (die per Definition nur Push and Pop an den Anfang des Stapels bietet) oberhalb eines vom Benutzer angegebenen zugrunde liegenden Containers, der push_back()
, pop_back()
und back()
Funktionen bereitstellt. Standardmäßig std::stack
verwendet std::deque
als zugrunde liegenden Container, aber std::vector
und std::list
sind Standard-Container, die auch die Anforderungen erfüllen (und std::vector
ist wahrscheinlich eine bessere Wahl in den meisten Fällen).
Wenn Sie in der Lage sein möchten, zum anderen Ende des Stapels zu schieben, dann verwenden Sie einfach direkt einen Container, der dies effizient unterstützt - std::deque
ist wahrscheinlich Ihre beste Wahl.
'std :: deque' war etwas, von dem ich vor diesem' std :: stack' noch nichts gehört hatte. 'std :: deque' ist wahrscheinlich das, was ich verwenden werde, da ich nur einen Stapel brauche, den ich hin und wieder auf den Boden von jedem hinzufügen kann – Derconug
std::stack
ist ein FILO Datencontainer, Punkt. Sie können auf der Rückseite hinzufügen und dann können Sie von der Rückseite entfernen. Wenn Sie etwas anderes tun müssen, müssen Sie einen Container verwenden, der nicht std::stack
ist.
Verwenden Sie eine std::deque
, die sowohl std::deque::push_back
als auch std::deque::push_front
Methoden zum Schieben von Elementen an die "Spitze" und "unten" der Datenstruktur in konstanter Zeit zur Verfügung stellt.
Sie scheinen falsche Container für das zu verwenden, was Sie erreichen möchten. Deque scheint besser zu passen.
- 1. Was bedeutet [1], wenn wir es am Ende einer Funktion und am Ende eines Tupels setzen?
- 2. Muss eine Psycopg2-Verbindung am Ende eines Skripts geschlossen werden?
- 3. Soll Offset am Ende der Sql-Abfrage angegeben werden?
- 4. Gibt es eine Möglichkeit, Standardcode für RESTful-Stacks zu generieren?
- 5. eine Pause am Ende einer Funktion
- 6. C++ Initialisierung eines statischen Stacks
- 7. C++ Ist es möglich, einen Objekttyp in eine Funktion zu übergeben, die verglichen werden soll?
- 8. ImageView am Ende eines CollectionView hinzufügen
- 9. Übergeben von URL-Abfragezeichenfolgen an eine Funktion, die hinzugefügt werden soll
- 10. Erstellen eines geöffneten Dateidialogs Funktion, die mehrmals verwendet werden soll
- 11. Gibt PapaParse am Ende seines Datenarrays eine leere Zeichenfolge an?
- 12. Warum ist es gute Praxis am Ende eines Verfahrens
- 13. Soll eine Klasse in C# instanziiert werden?
- 14. Erkennen, wenn am Ende eines stringstream
- 15. Warum gibt es zu wenig Speicherplatz am Ende meiner Website?
- 16. AsyncTask führt am Ende der Funktion
- 17. Mystery newline wird am Ende von QPlainTextEdit hinzugefügt
- 18. Warum werden am Ende meines Textes Sonderzeichen hinzugefügt, die aus PHP konvertiert wurden?
- 19. Gibt es eine Verknüpfung, um # am Anfang eines Codeblocks einzufügen?
- 20. Warum muss am Ende [RUBY] eine Startfunktion deklariert werden?
- 21. Pytest: Führen Sie eine Funktion am Ende der Tests
- 22. Gibt es eine C-Funktion, um die Verzeichnisberechtigung zu erhalten?
- 23. gibt es eine Funktion in Java, die von c
- 24. C# WPF App stürzt am Ende
- 25. Mustervergleich am Ende eines String/Binärarguments
- 26. Zurückgeben eines Objekts am Ende nach Verkettung
- 27. JS fügt eine Null am Ende
- 28. Wie werden am Ende einer CSV-Datei zusätzliche Trennzeichen hinzugefügt, wenn einige fehlen?
- 29. Verknüpfte Liste - Einfügen eines Knotens am Ende
- 30. Die Integrationen eines Labels werden mit IB hinzugefügt, die Integrationen eines Labels werden programmgesteuert hinzugefügt.
Wie wäre es mit 'std :: deque'? – 6502
Sie können nicht durch die Definition dieser Datenstruktur zum Ende eines Stapels gelangen. Verwenden Sie stattdessen eine doppelendige Warteschlange. –