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):
- Input Iterator: Võib lugeda elemente üks kord (näiteks sisend voost). Toetab
*it(lugemiseks),++it,it == other. - Output Iterator: Võib kirjutada elemente üks kord (näiteks väljund voogu). Toetab
*it(kirjutamiseks),++it. - Forward Iterator: Võib lugeda ja kirjutada elemente mitu korda ning liikuda ainult edasi. Toetab
*it(lugemine/kirjutamine),++it,it == other. - Bidirectional Iterator: Võib liikuda edasi ja tagasi. Toetab kõiki Forward Iterator operatsioone ning
--it. - 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(liikuminenelemendi võrra)it += n,it -= nit[n](juurdepääs elemendile nihkegan)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.