Voila, la question est surement très bête, mais je voulais savoir comment afficher le Xième élément d'une slist...
J'ai été voir sur http://www.sgi.com/tech/stl/Slist.html, mais je n'ai pas trouvé...
Merci d'avance![]()
Voila, la question est surement très bête, mais je voulais savoir comment afficher le Xième élément d'une slist...
J'ai été voir sur http://www.sgi.com/tech/stl/Slist.html, mais je n'ai pas trouvé...
Merci d'avance![]()
Si tu veut accéder au Nième élément, alors tu as sans doute choisi le mauvais conteneur.
Une liste permets un accès séquentiel, cad pour accéder au nième élément, tu doit parcourir les n-1 éléments précédents.
Pour un accès aléatoire, utilise plutôt vector.
Aussi si tu veux réellement une liste, slist n'est pas dans le standard et, à mon avis, apporte peu par rapport à une classique doublement chainée std::list (économie de mémoire : 1 pointeur par élément, économie de calcul : pas grand chose à mon avis)
Au cas où : slist est une extension de la STL SGI, ce n'est pas une classe standard. Pour accéder au x-ème élément d'une liste il faut utiliser std::advance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 slist<int>::iterator It = l.begin(); std::advance(It, x);
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Je ne connaissais pas std::advance.
Dans tout les cas, en interne, il faut parcourir la liste, ce qui est très lent.
Accès aléatoire rapide (temps constant) => std::vector
++
Merci pour les infos, pour ce qui est du vector, je n'en au pas besoin ici parceque ma liste va beaucoup changer, dans le cas du vector, si il grandi trop, il sera recopier en mémoir avec un Malloc plus grande. Donc j'ai besoin de la liste pour diminuer les recopiages au détriment du parcours de la liste...
Je vais essayer avec std::advance(It, x)...
Je vous tiens au courant !
A bientôt !
std:multi)set ?
et tu connais pas la taille a l'avance ?Envoyé par Colbix
On dirait bien que non...
Si le conteneur doit souvent grandir, souvent "changer de taille", le vector risque d'être vraiment lent comparé à une list.
De plus, parcourir avec advance est assez pratique, mais c'est en O(n)... Il faut tester les performances du code avec une list et un vector sur une mise en situation.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Partager