| |||||
| Dernière réponse | |
|---|---|
| Sujet : [C++ STL] Quelles sont les différences entre vector et list? | |
| wpk | dans la vraie vie, il est souvent preferable
d'avoir un tableau bien dimensionne en premier lieu que d'avoir a le redimensionner meme avec un cout asymptotique nul, le cout c'est la souplesse, le gain c'est la predictabilite et la limitation des couts "collateraux" (recopie de tableaux, deplacement des objets pointes). C'est ce que Verdoux et moi lui avons plus ou moins conseille de faire en utilisant un reserve ou en passant par un ctor qui reserve suffisament de place. de plus avec ta facheuse tendance a parler en O(x) on perd toute notion d'ordres de grandeurs veritables qui sont les seuls interessants. Un cout d'ajout dans une liste chainee est toujours O(1) (independant de la longueur de la liste), mais evidemment ce n'est pas le meme O(1) que l'ajout au sommet d'une pile (vecteur) (independant de la longueur de la pile). Tu n'en parles pas et c'est la seule chose qui est importante ici. euh, l'ajout dans un vecteur independament de sa longueur est en O(1) amorti, ca peut parraitre trompeur comme expression je te l'accorde. Pour un acces sequentiel, le vecteur est gagnant d'un poil (memoire contigue). Pour un acces aleatoire le vecteur est gagnant mais il ne faut evidemment pas faire n'importe quoi (on n'accede pas avec des indices sur une liste, on n'accede pas avec des pointeurs sur un vecteur). Pour une insertion, c'est plus une affaire d'arbitrage. Il est errone d'ajouter des elements au milieu d'un vecteur quand par ailleurs on utilise des indices pour adresser les elements. Mais parfois seule la rapidite entre en jeu et dans ce cas la, il faut choisir au cas par cas entre la perte de temps liee a cette operation d'ajout (qui peut intervenir de maniere tres limitee) et les surcouts lies a l'utilisation des listes par ailleurs. Si par exemple l'insertion est imposee par une methode de tri, il peut etre preferable de changer de methode de tri si la structure de donnee adoptee permet des gains appreciables par ailleurs. Entierement d'accord faut choisir au cas par cas (c'est ce que j'ai d'ailleurs egalement mentioné plus haut en proposant une liste voire une DQ) mais pour savoir quoi choisir, faut au moins connaitre la theorie ;) Au cas par cas: Mefiez vous des formules toutes faites. plus c'est theorique, moins il y a de chances que la personne qui a ecrit a reflechi a votre probleme. Ca ne veut pas dire qu'elle a faux, ca veut dire qu'il faut donc brancher votre cerveau pour voir si ca s'adapte a votre cas particulier. LEGREG ouais, on peut certes bidouiller dans son coin pour ecrire son ptit soft en faisant tout plein de tests pour comprendre comment ca marche. C'est pas ce qui est le plus rapide, efficace et lisible. Je partirais plutot de la theorie. Le choix du meilleur conteneur, du meilleur algo, etc... est alors fait en toute connaissance de cause et pas seulement sur des suputations empiriques. [jfdsdjhfuetppo]--Message édité par wpk--[/jfdsdjhfuetppo] |
| Vue Rapide de la discussion |
|---|