Da die einzigen Operationen, die erforderlich sind, damit ein Container in einem Stapel verwendet werden kann, folgende sind:
- zurück()
- push_back ()
- Pop zurück()
Warum ist der Standardcontainer dafür eine Deque anstelle eines Vektors?
Geben Deque-Neuzuweisungen nicht einen Puffer mit Elementen vor front () an, sodass push_front () eine effiziente Operation ist? Werden diese Elemente nicht verschwendet, da sie niemals im Kontext eines Stapels verwendet werden?
Wenn es keinen Overhead für die Verwendung einer Deque auf diese Weise anstelle eines Vektors gibt, warum ist die Standardeinstellung für priority_queue ein Vektor und keine Deque? (priority_queue erfordert front (), push_back () und pop_back () - im Wesentlichen dasselbe wie für stack)
Aktualisiert basierend auf den folgenden Antworten:
Es scheint, dass die Art und Weise, wie deque normalerweise implementiert wird, ein Array variabler Größe von Arrays fester Größe ist. Dies macht das Wachstum schneller als ein Vektor (der eine Neuzuweisung und ein Kopieren erfordert). Für so etwas wie einen Stapel, bei dem es nur um das Hinzufügen und Entfernen von Elementen geht, ist deque wahrscheinlich die bessere Wahl.
priority_queue erfordert eine starke Indizierung, da Sie bei jedem Entfernen und Einfügen pop_heap () oder push_heap () ausführen müssen. Dies macht den Vektor dort wahrscheinlich zu einer besseren Wahl, da das Hinzufügen eines Elements sowieso immer noch konstant abgeschrieben wird.