Sobes.tech
Junior

Mis on iterator standardmallide teegis (STL)?

sobes.tech AI

Vastus AI-lt

STL iterator — see on üldine kontseptsioon, mis pakub võimalust järjekindlalt ligi pääseda konteineri elementidele, ilma selle sisemist struktuuri avaldamata. See sarnaneb näitajale elemendile, kuid omab täiendavaid võimalusi sõltuvalt iteratori kategooriast.

Iteratori peamised funktsioonid:

  • Juurdepääs praegusele elemendile (*it).
  • Liikumine järgmise elemendi juurde (++it).
  • Võrdlus teise iteratoriga (it != end()).

Iteratori kategooriad (võimaluste laienemise järjekorras):

  1. Input Iterator: Võib lugeda elemente üks kord (näiteks sisend voost). Toetab *it (lugemiseks), ++it, it == other.
  2. Output Iterator: Võib kirjutada elemente üks kord (näiteks väljund voogu). Toetab *it (kirjutamiseks), ++it.
  3. Forward Iterator: Võib lugeda ja kirjutada elemente mitu korda ning liikuda ainult edasi. Toetab *it (lugemine/kirjutamine), ++it, it == other.
  4. Bidirectional Iterator: Võib liikuda edasi ja tagasi. Toetab kõiki Forward Iterator operatsioone ning --it.
  5. Random Access Iterator: Võib liikuda suvaliselt arvul elemente ühe sammu kaupa (nagu näitajad). Toetab kõiki Bidirectional Iterator operatsioone ning lisaks:
    • it + n, it - n (liikumine n elemendi võrra)
    • it += n, it -= n
    • it[n] (juurdepääs elemendile nihkega n)
    • it < other, <=, >, >= (positsioonide võrdlus)

Näide kasutamisest:

#include <vector>
#include <iostream>

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

    // Saame iteratori konteineri algusest
    std::vector<int>::iterator it = v.begin();

    // Läbime elemendid iteratoriga
    while (it != v.end()) {
        std::cout << *it << " "; // Dereferenceerime iteratori, et saada väärtus
        ++it; // Liigume järgmise elemendi juurde
    }
    std::cout << std::endl; // Tulemuseks: 1 2 3 4 5

    return 0;
}

Iteratorid võimaldavad abstraktsiooni konkreetse konteineri tüübi üle, võimaldades STL algoritmidel töötada erinevat tüüpi andmetega ühtselt.