2016-08-12 1 views
1

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?

+6

Wie wäre es mit 'std :: deque'? – 6502

+6

Sie können nicht durch die Definition dieser Datenstruktur zum Ende eines Stapels gelangen. Verwenden Sie stattdessen eine doppelendige Warteschlange. –

Antwort

0

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.

+0

'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

0

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.

0

Sie scheinen falsche Container für das zu verwenden, was Sie erreichen möchten. Deque scheint besser zu passen.

Verwandte Themen