Junior
Čo je to iterátor v štandardnej knižnici šablón (STL)?
sobes.tech AI
Odpoveď od AI
Iterátor v STL je všeobecná koncepcia, ktorá poskytuje spôsob prístupu k prvkom kontajnera (napríklad vector, list, map) postupne, bez odhalenia vnútorné štruktúry tohto kontajnera. Je to podobné ukazovateľovi na prvok, ale s ďalšími možnosťami v závislosti od kategórie iterátora.
Hlavné funkcie iterátora:
- Získanie prístupu k aktuálnemu prvku (
*it). - Presun na ďalší prvok (
++it). - Porovnanie s iným iterátorom (napríklad na určenie konca sekvencie
it != end()).
Kategórie iterátorov (v poradí rozšírenia možností):
- Input Iterator: Môžu čítať prvky raz (napríklad vstup zo streamu). Podporujú
*it(na čítanie),++it,it == other. - Output Iterator: Môžu zapisovať prvky raz (napríklad výstup do streamu). Podporujú
*it(na zápis),++it. - Forward Iterator: Môžu čítať a zapisovať prvky opakovane a pohybovať sa iba dopredu. Podporujú
*it(čítanie/zápis),++it,it == other. - Bidirectional Iterator: Môžu sa pohybovať dopredu aj dozadu. Podporujú všetky operácie Forward Iterator, ako aj
--it. - Random Access Iterator: Môžu sa pohybovať na ľubovoľný počet prvkov za jeden krok (ako ukazovatele). Podporujú všetky operácie Bidirectional Iterator, ako aj:
it + n,it - n(presun o n prvkov)it += n,it -= nit[n](prístup k prvku so posunom n)it < other,<=,>,>=(porovnanie pozícií)
Príklad použitia:
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
// Získanie iterátora na začiatok kontajnera
std::vector<int>::iterator it = v.begin();
// Prechádzanie prvkov pomocou iterátora
while (it != v.end()) {
std::cout << *it << " "; // Dereferencovanie iterátora na prístup k hodnote
++it; // Presun na ďalší prvok
}
std::cout << std::endl; // Výstup: 1 2 3 4 5
return 0;
}
Iterátory zabezpečujú abstrakciu nad konkrétnym typom kontajnera, umožňujúc algoritmom STL pracovať s rôznymi typmi dát jednotne.