Zwei grundlegende Arten von Containern:
-
Collections: Ansammlung von
beliebigen Objekten.
Beispiele sind:
-
T a[n], der normale Array, besitzt random access,
d.h. alle Elemente werden gleichschnell angesprochen.
Die Länge wird beim Anlegen festgelegt, danach nicht mehr änderbar.
-
vector<T>, random access, variable Länge, schnelles
anhängen am Ende.
-
deque<T>, random access, variable Länge, schnelles
anhängen am Anfang und Ende.
-
list<T>, schnelles Einfügen an jeder Stelle. Aber
Zugriffszeit hängt von der Länge ab.
-
set<T>, eine Art sortierte Liste, jeder Wert kommt nur einmal vor.
-
Map oder assoziativer Array,
key-value Paare
werden zusammen abgespeichert. Zugriff erfolgt über
key.
Im Zweifelsfall
vector<T> nehmen ...
Wichtige Zugriffsfunktionen:
-
push_back(T &x) Anhängen am Ende
-
pop_back() Löschen am Ende
-
push_front(T &x), pop_front() analog
-
insert(iterator position, T &x) Einfügen an bestimmter Position
-
erase(iterator anfang, iterator ende) Bereich löschen
-
operator [] Random access auf Elemente (Lesen & Schreiben),
nicht bei
list<T>
Standard-Iteratoren:
-
begin() Anfang
-
end() Ende
Und noch die Grösse:
size()
#include <vector> // vector headers
#include <iostream>
using namespace std;
int main()
{
vector<double> v; // empty <double> vector
double x;
while ( cin >> x ) { // read input until EOF
v.push_back(x); // append in vector
}
// classical loop, mit Index
for (int i = 0; i < v.size(); i++ ) {
cout << v[i];
}
// container loop mit Iterator
for ( vector<double>::iterator vp = v.begin(); vp != v.end(); vp++ )
{
cout << *vp ; // de-referencing as for pointers
}
// am einfachsten mit C++-11 auto und foreach loop
for ( auto vx : v )
{
cout << vx ; // vx enthaelt jeweils direkt Element
}
}
Wozu Iteratoren?
Zugriff auf einzelne Elemente direkt mit Index (
v[i]) funktioniert und ist leicht verständlich, wozu also den Umstand mit
Iteratoren ?
- Index geht nicht für alle Containerarten, Iteratoren schon, z.B. für
list.
- Flexibilität: Wenn man von vorneherein Iteratoren benutzt, kann man später leicht den Container ändern, ohne sonst das Programm ändern zu müssen.
- Algorithmen und Container member functions benutzen Iteratoren
GDuckeck
2019-08-01