Sobes.tech
Junior

Šta je iterator u standardnoj biblioteci šablona (STL)?

sobes.tech АИ

Одговор од АИ

Iterator u STL-u je opšta koncept koji pruža način pristupa elementima kontejnera (na primer, vector, list, map) sekvencijalno, bez otkrivanja interne strukture tog kontejnera. Slično je pokazivaču na element, ali sa dodatnim mogućnostima u zavisnosti od kategorije iteratora.

Glavne funkcije iteratora:

  • Pristup trenutnom elementu (*it).
  • Prelazak na sledeći element (++it).
  • Poređenje sa drugim iteratorom (na primer, za određivanje kraja sekvence it != end()).

Kategorije iteratora (po redosledu proširenja mogućnosti):

  1. Input Iterator: Može čitati elemente samo jednom (na primer, ulaz iz toka). Podržava *it (za čitanje), ++it, it == drugo).
  2. Output Iterator: Može zapisivati elemente samo jednom (na primer, izlaz u tok). Podržava *it (za pisanje), ++it).
  3. Forward Iterator: Može čitati i pisati elemente više puta i može se kretati samo napred. Podržava *it (čitanje/pisanje), ++it, it == drugo).
  4. Bidirectional Iterator: Može se kretati napred i nazad. Podržava sve operacije Forward Iterator, plus --it).
  5. Random Access Iterator: Može se kretati proizvoljnim brojem elemenata u jednom koraku (kao pokazivači). Podržava sve operacije Bidirectional Iterator, plus:
    • it + n, it - n (kretanje za n elemenata)
    • it += n, it -= n
    • it[n] (pristup elementu sa pomakom n)
    • it < drugo, <=, >, >= (upoređivanje pozicija)

Primer upotrebe:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};

    // Dobijanje iteratora na početak kontejnera
    std::vector<int>::iterator it = v.begin();

    // Prolazak kroz elemente pomoću iteratora
    while (it != v.end()) {
        std::cout << *it << " "; // Dereferenciranje iteratora za pristup vrednosti
        ++it; // Prelazak na sledeći element
    }
    std::cout << std::endl; // Izlaz: 1 2 3 4 5

    return 0;
}

Iteratori pružaju apstrakciju nad specifičnim tipom kontejnera, omogućavajući STL algoritmima da rade sa različitim tipovima podataka na ujednačen način.