Eh bien, les élèves de ma classe semblent tout à fait incapables de m'expliquer quand il est plus efficace d'utiliser des vecteurs, mais ils ont l'air plutôt contents de me conseiller d'utiliser des listes.
Voilà comment je le comprends
Listes : Chaque élément contient une adresse vers l'élément suivant ou précédent, donc avec cette fonctionnalité, vous pouvez randomiser les éléments, même s'ils ne sont pas triés, l'ordre ne changera pas: c'est efficace si votre mémoire est fragmentée. Mais il a également un autre très gros avantage: vous pouvez facilement insérer / supprimer des éléments, car la seule chose que vous devez faire est de changer certains pointeurs. Inconvénient: pour lire un seul élément au hasard, vous devez passer d'un élément à un autre jusqu'à ce que vous trouviez la bonne adresse.
Vecteurs : Lorsque vous utilisez des vecteurs, la mémoire est beaucoup plus organisée comme les tableaux ordinaires: chaque nième éléments est stocké juste après (n-1) e élément et avant (n + 1) e élément. Pourquoi est-ce mieux que la liste? Parce qu'il permet un accès aléatoire rapide. Voici comment: si vous connaissez la taille d'un élément dans un vecteur et s'ils sont contigus en mémoire, vous pouvez facilement prédire où se trouve le n-ième élément; vous n'avez pas à parcourir tous les éléments d'une liste pour lire celui que vous voulez, avec vector, vous le lisez directement, avec une liste que vous ne pouvez pas. En revanche, modifier le tableau vectoriel ou changer une valeur est beaucoup plus lent.
Les listes sont plus appropriées pour garder une trace des objets qui peuvent être ajoutés / supprimés en mémoire. Les vecteurs sont plus appropriés lorsque vous souhaitez accéder à un élément à partir d'une grande quantité d'articles uniques.
Je ne sais pas comment les listes sont optimisées, mais vous devez savoir que si vous voulez un accès rapide en lecture, vous devez utiliser des vecteurs, car à quel point les listes de fixation STL sont bonnes, l'accès en lecture ne sera pas aussi rapide que vector.