Étant donné que les seules opérations requises pour qu'un conteneur puisse être utilisé dans une pile sont les suivantes
- retour()
- push_back()
- pop_back()
Pourquoi le conteneur par défaut est-il un deque au lieu d'un vector ?
Les réallocations de deque ne donnent-elles pas un tampon d'éléments avant front() de sorte que push_front() est une opération efficace ? Ces éléments ne sont-ils pas gaspillés puisqu'ils ne seront jamais utilisés dans le contexte d'une pile ?
S'il n'y a pas de surcoût à utiliser une deque de cette façon au lieu d'un vector, pourquoi la valeur par défaut de priority_queue est-elle un vector et non une deque ? (priority_queue nécessite front(), push_back(), et pop_back() - essentiellement la même chose que pour stack)
Mise à jour sur la base des réponses ci-dessous :
Il semble que la façon dont les deque sont habituellement implémentés est un tableau de taille variable de tableaux de taille fixe. Cela permet une croissance plus rapide qu'un vecteur (qui nécessite une réallocation et une copie), donc pour quelque chose comme une pile qui consiste à ajouter et supprimer des éléments, deque est probablement un meilleur choix.
priority_queue nécessite une indexation importante, car chaque retrait ou insertion nécessite l'exécution de pop_heap() ou de push_heap(). Cela fait probablement de vector un meilleur choix puisque l'ajout d'un élément est de toute façon amorti de façon constante.