Puisque les seules opérations requises pour qu'un conteneur soit utilisé dans une pile sont:
- arrière()
- repousser()
- pop_back ()
Pourquoi le conteneur par défaut est-il un deque au lieu d'un vecteur?
Les réallocations deque ne donnent-elles pas un tampon d'éléments avant front () pour que push_front () soit 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 surcharge pour utiliser un deque de cette façon au lieu d'un vecteur, pourquoi la valeur par défaut pour priority_queue est-elle un vecteur pas également un deque? (priority_queue nécessite front (), push_back () et pop_back () - essentiellement les mêmes que pour stack)
Mis à jour en fonction des réponses ci-dessous:
Il semble que la façon dont deque est généralement implémentée est un tableau de taille variable de tableaux de taille fixe. Cela rend la 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 suppression et insertion vous oblige à exécuter pop_heap () ou push_heap (). Cela fait probablement du vecteur un meilleur choix, car l'ajout d'un élément est toujours amorti constant de toute façon.