bonsoir a tous.
est ce qu'on pourrait parcourrir une liste de la stl sans utiliser un iterateur.
bonsoir a tous.
est ce qu'on pourrait parcourrir une liste de la stl sans utiliser un iterateur.
Nope, les itérateurs ont été justement conçus pour le parcours des conteneurs de la STL.
Quel est le problème avec ta std::list ?
merci pour la reponse.
le principe de la liste chainee,c'est qu'elle contient des noeuds,chaque noeud pointant vers le noeud suivant,chose qui assure ce chainage puisue le parcours se fait simplement via une methode qui ne fai qu'affecter au noeud courrant l'adresse du suivant de l'ex courrant.
ma question est:
est ce que la list de la stl n'est pas munie d'une telle methode next().
Merci.
Salut,
non, il n'y a pas de méthode next() sur les listes stl.
mais tu peux creer une liste stl avec des element d'une classe dans laquel tu peux implanter ta méthode next().
si tu souhaites en savoir plus :
http://cpp.developpez.com/faq/cpp/?page=STL
bye
merci pour la reponse.
mais, je ne pense pas que le fait de munir les elements de la liste d'une telle methode marcherait.et je ne vois pas comment pourrait on concevoir cela.
si par exemple on a une liste de points,sachant que point est defini dans une classe a part.
implanter une methode next() pour la classe point n'aurait vraiment pas de signification.
vous etes pas d'accord avec moi?
Si, en quelque sorte, par le biais d'un itérateur.Envoyé par monodev
liste.begin() est l'équivalent du pointeur de tête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 // Habituellement pour parcourir une liste on fait : Node * node = head; while(node) { node->DoStuff(); node = node->next(); } // Alors qu'avec la STL on fait : std::list<Point>::iterator it = liste.begin(); while(it != liste.end() { it->DoStuff(); it++; } // Ceci dit la notation usuelle, que tu retrouveras dans les tutos sur la STL est plutôt : for(std::list<Point>::iterator it = liste.begin() ; it != liste.end() ; ++it) { it->DoStuff(); }
liste.end() est l'équivalent du pointeur null en fin de liste.
it++ est l'équivalent de node = node->next();
merci pour la reponse.
Ou encore, pour être 100% STL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::for_each( liste.begin(), liste.end(), std::mem_fun_ref(&Point::DoStuff) );
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
mem_fun_ref c'est pour les low.
Le true-STL-spirit c'est ça :
Lambdaaaa powwwwwwwwaaahh !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::for_each(liste.begin(), liste.end(), [](Point& p){p.DoStuff()});![]()
Partager