Poiché le uniche operazioni richieste per un contenitore da utilizzare in uno stack sono:
- indietro()
- respingere()
- pop_back ()
Perché il contenitore predefinito per esso è una deque invece di un vettore?
Non deselezionare le riallocazioni di fornire un buffer di elementi prima di front () in modo che push_front () sia un'operazione efficiente? Questi elementi non vengono sprecati dal momento che non verranno mai utilizzati nel contesto di uno stack?
Se non vi è alcun sovraccarico per l'utilizzo di una deque in questo modo invece di un vettore, perché l'impostazione predefinita per priority_queue è un vettore non anche una deque? (priority_queue richiede front (), push_back () e pop_back () - essenzialmente come per lo stack)
Aggiornato in base alle risposte seguenti:
Sembra che il modo in cui deque viene solitamente implementato sia un array di dimensioni variabili di array di dimensioni fisse. Questo fa crescere più velocemente di un vettore (che richiede riallocazione e copia), quindi per qualcosa come uno stack che consiste nell'aggiunta e nella rimozione di elementi, deque è probabilmente una scelta migliore.
priority_queue richiede un'indicizzazione pesante, poiché ogni rimozione e inserimento richiede l'esecuzione di pop_heap () o push_heap (). Questo probabilmente rende il vettore una scelta migliore in questo caso poiché l'aggiunta di un elemento è comunque costante ammortizzata.