Des Conteneurs STL - différence entre le vecteur de la liste et deque
Dois-je utiliser deque au lieu de vecteur si j'aimerais pousser éléments au début du conteneur? Quand devrais-je utiliser la liste et à quoi sert-elle?
Vous devez vous connecter pour publier un commentaire.
Utilisation
deque
si vous avez besoin d'efficace d'insertion/retrait au début et à la fin de la séquence et de l'accès aléatoire; l'utilisationlist
si vous avez besoin d'efficace d'insertion n'importe où, au prix du sacrifice de l'accès aléatoire. Les itérateurs et les références àlist
éléments sont très stables dans presque n'importe mutation du récipient, tandis quedeque
a très particulière itérateur de référence et d'invalidation des règles (donc vérifier soigneusement).Aussi,
list
est un nœud conteneur, tandis qu'undeque
utilise des morceaux de mémoire contiguë, de sorte localité de mémoire peuvent avoir des effets sur les performances qui ne peuvent pas être capturées par la complexité asymptotique des estimations.deque
peut servir comme un remplacement pourvector
presque partout et doit probablement été considéré comme le "par défaut" conteneur en C++ (en raison de sa plus souple que les exigences de mémoire); la seule raison de préférervector
, c'est quand vous devez disposer d'une garantie de mémoire contiguë de mise en page de votre séquence.vector
presque toujours plus performante que ladeque
, dans mon expérience.std::vector
souvent de meilleures performances, même pour les insertions d'autres qu'à la fin pour beaucoup de "typique" de la taille des contenants.deque
etvector
fournir un accès aléatoire,list
fournit seulement linéaire accède. Donc, si vous devez être en mesure de faire conteneur[i], que les règleslist
. D'autre part, vous pouvez insérer et supprimer des éléments n'importe où dans unlist
efficacement, et de l'exploitation dans le milieu devector
etdeque
sont lents.deque
etvector
sont très similaires, et sont fondamentalement interchangeables pour la plupart des besoins. Il y a seulement deux différences dignes de mention. Tout d'abord,vector
ne peut efficacement ajouter de nouveaux éléments à la fin, alors quedeque
pouvez ajouter des éléments à chaque extrémité de manière efficace. Alors pourquoi voudriez-vous jamais utiliser unvector
alors? Contrairement àdeque
,vector
garantir que tous les éléments seront stockés dans la mémoire contiguë endroits, ce qui rend une itération à travers plus rapidement dans certaines situations.