Junior
Quelle est la différence entre les conteneurs vector et list en C++?
sobes.tech IA
Réponse de l'IA
std::vector représente un tableau dynamique. Les données sont stockées dans un bloc mémoire contigu.
Avantages de vector :
- Accès rapide par index (O(1)).
- Bonne localité des données, utile pour le cache du processeur.
- Ajout/suppression rapide à la fin (en moyenne O(1)).
Inconvénients de vector :
- Complexité pour ajouter/supprimer à un endroit arbitraire (O(n)).
- Réallocation de mémoire lors de la croissance, nécessitant la copie des éléments.
std::list est une liste doublement chaînée. Chaque élément stocke des pointeurs vers l'élément précédent et suivant.
Avantages de list :
- Complexité pour ajouter/supprimer à n'importe quel endroit (O(1)) après avoir trouvé la position (qui peut être O(n)).
- Ne nécessite pas un bloc mémoire contigu.
Inconvénients de list :
- Accès lent par index (O(n)).
- Occupe plus de mémoire par élément (en raison des pointeurs).
- Mauvaise localité des données.
Différence principale :
| Caractéristique | std::vector |
std::list |
|---|---|---|
| Structure de données | Tableau dynamique | Liste doublement chaînée |
| Stockage des données | Mémoire contiguë | Nœuds avec pointeurs |
| Accès par index | O(1) | O(n) |
| Insertion/suppression | O(n) (sauf à la fin) | O(1) (après l'itérateur) |
| Localité | Bonne | Mauvaise |
| Consommation mémoire | Éléments | Éléments + pointeurs |
Le choix entre vector et list dépend des opérations typiques sur le conteneur. Si l'accès aléatoire et l'ajout/suppression à la fin sont fréquents, vector est préféré. Si les insertions/suppressions fréquentes au milieu de la liste sont importantes, list est préféré.