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. |
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.