Warum verwendet std :: stack standardmäßig std :: deque?

Da die einzigen Operationen, die für die Verwendung eines Containers in einem Stapel erforderlich sind, sind:

zurück()push_back ()Pop zurück()

Warum ist der Standardcontainer dafür eine Deque anstelle eines Vektors?

Geben Deque-Neuzuordnungen nicht einen Puffer mit Elementen vor front (), 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 gibt, um eine Deque auf diese Weise anstelle eines Vektors zu verwenden, warum ist der Standardwert für priority_queue für einen Vektor auch keine Deque? (Für priority_queue sind front (), push_back () und pop_back () erforderlich - im Wesentlichen dasselbe wie für stack)

Aktualisiert basierend auf den Antworten unten:

Es scheint, dass die Art und Weise, wie Deque normalerweise implementiert wird, ein Array mit variabler Größe und Arrays mit fester Größe ist. Dies macht das Wachstum schneller als bei einem Vektor (der eine Neuzuweisung und ein Kopieren erfordert). Für einen Stapel, in dem es darum geht, Elemente hinzuzufügen und zu entfernen, ist Deque wahrscheinlich die bessere Wahl.

Für priority_queue ist eine starke Indizierung erforderlich, da Sie zum Entfernen und Einfügen pop_heap () oder push_heap () ausführen müssen. Dies macht Vektor dort wahrscheinlich zu einer besseren Wahl, da das Hinzufügen eines Elements ohnehin immer noch konstant amortisiert ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage