Programmation en C ++: faire votre chemin à travers une liste

Le C ++ Les itération programmeur à travers un réseau en fournissant l'indice de chaque élément. Cependant, cette technique ne fonctionne pas pour les récipients, comme liste qui ne permettent pas pour l'accès aléatoire. On pourrait imaginer une solution fondée sur des méthodes telles que getFirst () et getNext ()- Cependant, les concepteurs de la Standard Template Library voulaient fournir une méthode commune pour traverser tout type de récipient.

Pour cela, la Standard Template Library définit l'itérateur.

Un iterator est un objet qui pointe vers les membres d'un conteneur. En général, chaque itération prend en charge les fonctions suivantes:

  • Une classe peut retourner un itérateur qui pointe vers le premier membre de la collection.

  • L'itérateur peut être déplacé d'un membre à l'autre.




  • L'itérateur renvoie une indication lorsqu'il atteint la fin de la liste.

  • Le programme peut récupérer l'élément pointé par l'itérateur.

Le Standard Template Library fournit également des itérateurs à rebours pour déplacer vers l'arrière dans les listes. Tout ici environ itérateurs applique également pour itérateurs à rebours.

Le code nécessaire pour itérer à travers un liste est différent de ce qui est nécessaire pour traverser une vecteur (pour ne citer que deux exemples). Cependant, l'itérateur cache ces détails.

La méthode commencer() Retourne un itérateur qui pointe vers le premier élément d'une liste. Le indirection operator * () récupère une référence à l'objet pointé par l'itérateur. La ++ opérateur déplace l'itérateur à l'élément suivant dans la liste.

Un programme continue à incrémenter son chemin à travers la liste jusqu'à ce que l'itérateur est égale à la valeur retournée par fin(). Le code suivant commence au début d'une liste des élèves et affiche chacun de leurs noms:

displayStudents vides (liste étudiants) {// allouer un itérateur qui pointe vers le premier élément // dans le ListeGroupe:: iterator iter = students.begin () - (! iter = students.end ()) // continuent à boucle à travers la liste jusqu'à ce que la // iterator arrive à la fin de l'listwhile {// récupérer l'étudiant les Points de iterator atStudent s = * iter-cout lt; lt; S.sname lt; lt; endl - // maintenant passer l'itérateur sur l'élément suivant // dans le listiter ++ -}}

Déclarations pour itérateurs peuvent devenir très complexe. Ceci est probablement la meilleure justification pour le auto déclaration introduite avec la norme '11:

pour (auto iter = students.begin () - iter = students.end (!) - iter ++) {cout lt; lt; ITER> sName lt; lt; endl-}

Ceci déclare iter être un itérateur de tout type est retourné par la méthode liste::commencer(), en évitant les déclarations torturés figurant dans le code extrait plus tôt. À quel point cela est cool!


» » » » Programmation en C ++: faire votre chemin à travers une liste