Allgemein sind Iteratoren Objekte, die auf andere Objekte zeigen.

Ein Iterator dient beispielsweise dazu, auf Elemente einer Kollektion zu zeigen. Die Anordnung der Elemente einer Kollektion im Arbeitsspeicher wird durch einen Container verwaltet. Mit einem Iterator ist also der Zugriff auf ein Element bzw. eine Position in einem Container möglich. Mit zwei Iteratoren kann ein Elementebereich angegeben werden.

Typisch für die Verwendung der STL ist der gemischte Einsatz von Elementfunktionen und Funktionen der "generischen Algorithmen". Dies ist kein objektorientierter Ansatz. Eine Objekt-Orientierte Programmierung (OOP) würde (fast) alle für ein Objekt benötigten Funktionen der entsprechenden Klasse zuordnen.

Eine generische Funktion arbeitet nur mittelbar über Iteratoren an einem Container. Iteratoren sind die Bindeglieder zwischen den Containern und den generischen Funktionen.

Im folgenden Beispiel ist find eine generische Funktion. Die Iteratoren für find werden von der Containerinstanz Vektor geliefert.

Beispiel (unvollständig):


1.
2.
3.
4.
5.

Anfang = Vektor.begin();
Ende = Vektor.end();
Stelle = find(Anfang, Ende, 123);
if (Stelle!=Ende)
 Vektor.insert(Stelle, 98);

 Anfangsiterator
 Endeiterator
 Nach dem Elementwert 123 suchen.
 Wenn Stelle gültig ist (123 wurde gefunden),
 dann füge davor das Element 98 ein.
    Hinweise zu den Quelltextzeilen
  1. Vektor soll ein Container der Klasse vector sein.
    Die Elementfunktion begin() liefert den Iteratorwert für den Anfang des Vektors. Anfang referenziert dann also das erste Vektorelement.
  2. Die Elementfunktion end() liefert einen Iteratorwert für das Ende des Vektors.
    Wichtig!
    Der Endeiterator referenziert kein Vektorelement. Er zeigt hinter das letzte Element.
  3. Die generische Funktion find() sucht in allen Elementen zwischen dem Bereichsanfangsiterator (erster Parameter, einschließend) und dem Bereichsendeiterator (zweiter Parameter, ausschließend) das erste Vorkommen des dritten Parameterwertes, hier 123.
    Bei Erfolg liefert find den Iterator auf das gefundene Element, andernfalls den Bereichendeiterator.
  4. Stelle!=Ende ist genau dann wahr, wenn das gesuchte Element gefunden wurde.
  5. Die Elementfunktion insert() fügt in den Vektor vor das durch den Iterator (erster Parameter) referenzierte Element das als zweiten Parameter übergebene Element ein, hier 98.

Die obige Anweisungssequenz kann sebstverständlich auch wesentlich kürzer gefasst werden ;-)


if ((Stelle=find(Vektor.begin(),Vektor.end(),123))!=Vektor.end())
 Vektor.insert(Stelle,98);

Selbstverständlich kann man leicht entsprechende Klassen oder Klassentemplates in OOP unter Verwendung der STL-Klassentemplates und der generischen Algorithmen zusammenstellen. Verschiedene Softwarefirmen bieten auch entsprechende Bibliotheken an.