Wird geladen...

Iteratoren und ihr Einsatz in der C++ STL

Lernen Sie Iteratoren in C++ und ihren Einsatz mit STL-Containern und Algorithmen für eine effiziente Datenverarbeitung.

Die C++ Standardbibliothek (STL) basiert auf einer mächtigen Abstraktion namens Iterator, die das Durchlaufen von Datenstrukturen ermöglicht. Iteratoren sind ein zentraler Bestandteil von STL-Containern (vector, list, map, set…) und erlauben das Navigieren von einem Element zum nächsten auf einheitliche Weise. In diesem Artikel werden die verschiedenen Iterator-Arten, ihre Verwendung sowie die Integration in STL-Algorithmen ausführlich erläutert.


1) Was ist ein Iterator?

Ein Iterator ist ein Objekt, das den Zugriff auf Elemente eines Containers ermöglicht. Er verhält sich ähnlich wie ein Zeiger, ist jedoch vollständig von der STL abstrahiert.

Hauptaufgaben von Iteratoren:

Beispiel


#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};

    vector<int>::iterator it = v.begin();

    cout << *it; // 10
}

2) Iterator-Arten

Verschiedene STL-Container unterstützen unterschiedliche Iterator-Kategorien.

Beispiele:
vector → random access iterator
list → bidirectional iterator
map/set → bidirectional iterator


3) begin() und end()

Alle STL-Container stellen zwei grundlegende Funktionen bereit:


vector<int> v = {1, 2, 3};

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

4) Konstant-Iterator (const_iterator)

Ein const_iterator dient zum Lesen, verhindert jedoch das Ändern der Elemente.


vector<int> v = {10, 20, 30};

vector<int>::const_iterator it = v.begin();

// *it = 50; // FEHLER: const_iterator erlaubt keine Änderungen

cout << *it;

5) Reverse Iterator (rbegin & rend)

Reverse Iteratoren ermöglichen das rückwärts gerichtete Durchlaufen eines Containers.


vector<int> v = {1, 2, 3};

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    cout << *it << " ";
}
// Ausgabe: 3 2 1

6) Elemente mit Iteratoren verändern


vector<int> v = {10, 20, 30};

for (auto it = v.begin(); it != v.end(); ++it) {
    *it *= 2;
}

for (int x : v)
    cout << x << " ";
// Ausgabe: 20 40 60

7) Iteratoren und STL-Algorithmen

Alle STL-Algorithmen arbeiten mit Iteratoren.

sort verwenden


#include <algorithm>

vector<int> v = {50, 20, 10};

sort(v.begin(), v.end());

find verwenden


auto it = find(v.begin(), v.end(), 20);

count verwenden


int c = count(v.begin(), v.end(), 10);

8) Iteration über map und set


#include <map>
#include <iostream>
using namespace std;

int main() {
    map<string, int> ages = {
        {"Johann", 25},
        {"Laura", 30},
        {"Michael", 28}
    };

    for (auto it = ages.begin(); it != ages.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
}

9) Elemente per Iterator löschen

Iteratoren können gezielt Elemente löschen helfen.


vector<int> v = {10, 20, 30, 40};

auto it = find(v.begin(), v.end(), 20);

if (it != v.end())
    v.erase(it);

10) Vorteile der Iterator-Verwendung


11) TL;DR

  • Iterator: standardisierte Möglichkeit, auf Container-Elemente zuzugreifen
  • begin/end → Vorwärtsiteration
  • rbegin/rend → Rückwärtsiteration
  • const_iterator → nur Lesen
  • STL-Algorithmen funktionieren vollständig über Iteratoren
  • Beispiele getestet mit Visual Studio 2022 und GCC

Ähnliche Artikel