(STL) Accéder aux fonctions d'une classe via un itérateur ?
bonjour,
voilà je cherche à convertir un bout de code en respectant le style c++, utilisant des vector/itérateur et je bloque sur l'utilisation des itérateurs.
J'ai une classe Groupe qui contient une collection de Personne.
La classe Personne contient une fonction afficherNom().
Voilà le code que je souhaite modifier et qui m'affiche le nom de toutes les personnes du groupe :
Code:
1 2 3
|
for (int i = 0 ; i < groupe.nbPersonnes ; i++)
groupe.lesPersonnes[i].afficherNom(); |
Ca fonctionne très bien mais ressemble trop à du C. En introduisant des vectors, le code devient :
Code:
1 2 3
|
for (int i = 0 ; i < groupe.nbPersonnes ; i++)
groupe.vectlesPersonnes.at(i)->afficher(); |
Ca marche bien mais maintenant je veux utiliser un itérateur et c'est là que ça coince. Il faudrait une truc du style :
Code:
1 2 3
|
for(itlesPersonnes=groupe.vectlesPersonnes.begin();itlesPersonnes!=groupe.vectlesPersonnes.end();itlesPersonnes++)
*itlesPersonnes->afficher(); |
J'ai essayé toutes sortes de choses mais rien ne va. Une idée ?
Re: (STL) Accéder aux fonctions d'une classe via un itérateu
Bonjour,
Code:
1 2 3
| // version 1
for (int i = 0 ; i < groupe.nbPersonnes ; i++)
groupe.lesPersonnes[i].afficherNom(); |
ici j'imagine que lesPersonnes est un Personne * ?
Code:
1 2 3
| // version 2
for (int i = 0 ; i < groupe.vectLesPersonnes.size() ; i++)
groupe.vectLesPersonnes[i]->afficher(); |
si vectLesPersonnes est un std::vector<Personne>, alors autant utiliser la fonction size() pour en connaitre la taille. ainsi l'attribut nbPersonne n'a plus lieu d'etre. ça évite d'avoir à gérer cette variable.
Code:
1 2 3 4 5 6 7
| // version 3
typedef std::vector<Personne>::const_iterator iterPers;
iterPers debut = groupe.vectlesPersonnes.begin();
iterPers fin = groupe.vectlesPersonnes.end();
for(iterPers it = debut ; it != fin ; it++)
*it->afficher(); |
ne pas hésiter à écrire plusieurs lignes et à introduire des variables. ça facilite la lecture.