C ++ Programmierung: Machen Sie Ihren Weg durch eine Liste

Die C ++ Programmierer iteriert durch eine Anordnung von den Index jedes Elements bereitstellt. Allerdings ist diese Technik nicht für Container arbeiten wie Liste dass nicht erlauben, für Direktzugriff. Man könnte eine Lösung auf der Grundlage der Methoden vorstellen, wie getFirst () und getNext ()- Allerdings wollten die Designer der Standard Template Library ein gemeinsames Verfahren zu schaffen, für jede Art von Behälter durchquert.

Dazu definiert der Standard Template Library den Iterator.

Ein Iterator ist ein Objekt, das an die Mitglieder eines Behälters zeigt. Im Allgemeinen unterstützt jeder Iterator die folgenden Funktionen:

  • Eine Klasse kann einen Iterator zurückzugeben, die auf das erste Element der Sammlung zeigt.

  • Der Iterator kann von einem Mitglied zum nächsten verschoben werden.

  • Der Iterator gibt eine Angabe, wenn das Ende der Liste erreicht.

  • Das Programm kann das Element abgerufen werden, auf die der Iterator.

Die Standard Template Library bietet auch Reverse-Iteratoren für die Bewegung nach hinten durch Listen. Alles hier über Iteratoren gilt gleichermaßen für die reverse Iteratoren.

Der Code notwendig, um durchlaufen ein Liste verschieden ist von derjenigen notwendig a zu durchlaufen Vektor (Um nur zwei Beispiele). Allerdings verbirgt sich der Iterator diese Details.

Die Methode Start() gibt einen Iterator, der auf das erste Element einer Liste verweist. Der Indirektionsoperator Operator*() ruft eine Referenz auf das Objekt an der Iterator hingewiesen. Das ++ Bediener bewegt den Iterator auf das nächste Element in der Liste.

Ein Programm setzt seinen Weg durch die Liste zu erhöhen, bis der Iterator gleich dem Wert zurückgegeben durch Ende(). Der folgende Codeausschnitt beginnt am Anfang einer Liste von Studenten und zeigt die jeweils ihre Namen:

Leere displayStudents (Liste Studenten) {// einen Iterator zuordnen, die in der listlist auf das erste Element // Punkte:: Iterator iter = students.begin () - (! Iter = students.end ()) // Schleife durch die Liste fortsetzen, bis die // Iterator das Ende des listwhile trifft {// Abrufen der Schüler die Iterator Punkte atStudent s = * iter-cout lt; lt; s.sName lt; lt; Endl - // nun bewegen Sie den Iterator auf das nächste Element // in der listiter ++ -}}

Erklärungen für Iteratoren kann sehr komplex werden. Dies ist wahrscheinlich die beste Rechtfertigung für die Auto Erklärung eingeführt mit dem '11 Standard:

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

Dies erklärt iter ein Iterator welcher Art auch immer zu sein, wird von der Methode zurück Liste::Start(), die gequälten Erklärungen zu vermeiden in dem früheren Codeausschnitt gezeigt. Wie cool ist das!

Menü