Pojam iteratora je uveden u C++ STL (Standard Template Library). Svaki kontejner (std::list, std::vector, std::map) u STL-u ima svoj iterator. Svi iteratori svih kontejnera se koriste na identičan način. To olakšava ovladavanje STL-om. Iteratori imaju ograničen skup aktivnosti koje s njima mogu da se rade. To sprečava programera da negde zabrlja. Najjednostavnija stvar je iteracija kroz ceo kontejner, i ovaj kod je istovetan, šta god da staviš umesto KONTEJNER:
Code:
void iteriraj(KONTEJNER& cinculatori)
{
for (KONTEJNER::iterator it = cinculatori.begin(); it != cinculatori.end(); it++)
{
// Uradi nešto sa it*, recimo (it*).cinculiraj()
}
}
Da bi ovo radilo ovaj KONTEJNER::iterator mora da može da dobije vrednost (operator = i kopi konstruktor), da se poredi sa drugim iteratorom (== i !=), da se inkrementira (it++ i ++it), i da se dereferencira (it*). To su sve operatori koje ti moraš da napišeš. Takođe, sama klasa KONTEJNER mora da ima dve funkcije, begin() koja vraća iterator na prvog člana, i end() koji vraća ono što je posle poslednjeg člana (tako da važi poslednji_član++ == end()). Ti (kreator klase KONTEJNER) sam odlučuješ šta je kod tebe prvo i poslednje, ali šta god da odlučiš ovaj primer gore mora da ima smisla kad se izvršava.
Ja nikad nisam pravio klasu koja mora da oponaša STL logiku, ali pretpostavljam da je suština funkcionalnosti u operatoru ++. Tu mora da postoji kod koji će promeniti vrednost iteratoru tako da dobiješ novi string kad se taj iterator dereferencira (sa *).
Ovde je olakšavajuća okolnost što ne mora da se implementira i operator --.