Pourquoi ne std::stack utiliser std::deque par défaut?

Car les seules opérations nécessaires pour un conteneur pour être utilisé dans une pile sont:

  • back()
  • push_back()
  • pop_back()

Pourquoi le conteneur par défaut pour un deque au lieu d'un vecteur?

Ne pas deque réallocations de donner un tampon d'éléments avant (front), de sorte que push_front() est une exploitation efficace? Ne sont pas ces éléments perdre car ils ne pourront jamais être utilisé dans le contexte d'une pile?

Si il n'y a pas de frais généraux pour l'utilisation d'un deque de cette façon, au lieu d'un vecteur, pourquoi est la valeur par défaut pour priority_queue un vecteur non d'un deque aussi? (priority_queue nécessite l'avant(), push_back(), et pop_back() - essentiellement les mêmes que pour la pile)


Mis à jour sur la base des Réponses ci-dessous:

Il semble que l'deque est généralement mis en œuvre est une variable tableau de taille fixe, la taille des tableaux. Cela rend à croissance plus rapide qu'un vecteur (qui nécessite la réaffectation et à la reproduction), donc quelque chose comme une pile, ce qui est tout au sujet de l'ajout et la suppression d'éléments, deque est probablement un meilleur choix.

priority_queue nécessite d'indexation fortement, comme chaque retrait et l'insertion de vous oblige à exécuter pop_heap() ou push_heap(). C'est probablement ce qui fait vector un meilleur choix, il y depuis l'ajout d'un élément est toujours amorti constant de toute façon.

  • Le raisonnement suivi dans votre "mise à jour" n'est pas tout à fait droit. vecteur normalement ajoute et supprime des éléments à partir de la fin plus rapide qu'un deque. deque est plus rapide pour la culture de la mémoire, non pas de pousser des éléments.
InformationsquelleAutor Greg Rogers | 2008-09-19