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):
- Input Iterator: Može čitati elemente samo jednom (na primer, ulaz iz toka). Podržava
*it(za čitanje),++it,it == drugo). - Output Iterator: Može zapisivati elemente samo jednom (na primer, izlaz u tok). Podržava
*it(za pisanje),++it). - 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). - Bidirectional Iterator: Može se kretati napred i nazad. Podržava sve operacije Forward Iterator, plus
--it). - 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 -= nit[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.