C++ STL Iteratoren

Funktionsweise und Umgang mit C++ STL Iteratoren



Mit Iteratoren können Elemente eines Containers iterativ - also anhand einer Schleife besucht werden.

Jeder Iterator zeigt dabei auf eine Elementposition des entsprechenden Containers.

Iteratoren bieten folgende Operationen an:
* Adress-Arithmetik
* Inkrementierung und Dekrementierung
* Dereferenzierung
* Gleichheit
* Ordnungsrelation

// Liste anlegen, mit Inhalt füllen und vorwärts wieder ausgeben
 
#include <iostream>
#include <iterator>
#include <list>
 
 
int main()
{
  list<int> lst;
  list<int>::iterator it;
  const int size = 10;
 
  // Liste mit Quadratzahlen füllen
  for (int i = 1; i <= size; i++)
  lst.push_back(i*i);
 
  // Liste mit Iterator ausgeben
  for (it = lst.begin(); it != lst.end(); ++it)
    cout << *it << ", ";
  cout << endl;
 
  return 0;
}
Ausgabe: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

// Liste anlegen, mit Inhalt füllen
// und mit reverse_iterator rückwärts wieder ausgeben
 
#include <iostream>
#include <iterator>
#include <list>
 
 
int main()
{
  list<int> lst;
  list<int>::reverse_iterator it_r;
  const int size = 10;
 
  // Liste mit Quadratzahlen füllen
  for (int i = 1; i <= size; i++)
  lst.push_back(i*i);
 
  // Liste mit Reversions-Iterator ausgeben
  for (it_r = lst.rbegin(); it_r != lst.rend(); ++it_r)
    cout << *it_r << ", ";
  cout << endl;
 
  return 0;
}
Ausgabe: 100, 81, 64, 49, 36, 25, 16, 9, 4, 1

// Vektor anlegen, mit Inhalt füllen und vorwärts wieder ausgeben
#include <iostream>
#include <iterator>
#include <vector>
 
 
int main()
{
  const int size = 10;
  vector<int> vec;
  vector<int>::iterator it;
 
  // Vektor mit Quadratzahlen füllen
  it = vec.begin();
  for (int i = 1; i <= size; i++)
    *it++ = i*i;
 
  // Vektor mit Iterator ausgeben
  for (it = vec.begin(); it != vec.end(); ++it)
    cout << *it << ", ";
  cout << endl;
 
  return 0;
}
Ausgabe: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

// Inhalt mit back_insert_iterator absteigent sortiert in Liste einfügen
 
#include <iostream>
#include <iterator>
#include <list>
 
 
int main()
{
  // Einfüge-Iterator erstellen
  list<int> v;
  back_insert_iterator< list<int> > aBackInserter(v);
 
  // Container mit Qudratzahlen füllen
  for (int i = 1; i <= 10; i++)
    *aBackInserter++ = i*i;
 
  // Container ausgeben
  list<int>::iterator it = v.begin();
  while(it != v.end())
    cout << *it++ << ", ";
  cout << endl;
 
  return 0;
}
Ausgabe: 100, 81, 64, 49, 36, 25, 16, 9, 4, 1

// Inhalt mit front_insert_iterator aufsteigend sortiert in Liste einfügen
 
#include <iostream>
#include <iterator>
#include <list>
 
 
int main()
{
  // Liste mit Einfüge-Iterator
  list<int> v;
  front_insert_iterator< list<int> > aFrontInserter(v);
 
  // Container mit Qudratzahlen füllen:
  for (int i = 1; i <= 10; i++)
    *aFrontInserter++ = i*i;
 
  // Container ausgeben:
  list<int>::iterator it = v.begin();
  while(it != v.end())
    cout << *it++ << ", ";
  cout << endl;
 
  return 0;
}
Ausgabe: 100, 81, 64, 49, 36, 25, 16, 9, 4, 1,