Junior
Co je to iterátor v knihovně standardních šablon (STL)?
sobes.tech AI
Odpověď od AI
Iterátor v STL je obecný koncept, který poskytuje způsob přístupu k prvkům kontejneru (například vector, list, map) sekvenčně, aniž by odhaloval vnitřní strukturu tohoto kontejneru. Je podobný ukazateli na prvek, ale s dalšími možnostmi v závislosti na kategorii iterátoru.
Hlavní funkce iterátoru:
- Přístup k aktuálnímu prvku (
*it). - Přesun k dalšímu prvku (
++it). - Porovnání s jiným iterátorem (například pro určení konce sekvence
it != end()).
Kategorie iterátorů (v pořadí rozšiřování možností):
- Input Iterator: Může číst prvky pouze jednou (například vstup ze streamu). Podporuje
*it(pro čtení),++it,it == jiný). - Output Iterator: Může zapisovat prvky pouze jednou (například výstup do streamu). Podporuje
*it(pro zápis),++it). - Forward Iterator: Může číst a zapisovat prvky opakovaně a může se pohybovat pouze vpřed. Podporuje
*it(čtení/zápis),++it,it == jiný). - Bidirectional Iterator: Může se pohybovat vpřed i vzad. Podporuje všechny operace Forward Iterator, plus
--it). - Random Access Iterator: Může se pohybovat libovolným počtem prvků v jednom kroku (jako ukazatele). Podporuje všechny operace Bidirectional Iterator, plus:
it + n,it - n(pohyb o n prvků)it += n,it -= nit[n](přístup k prvku s posunem n)it < jiný,<=,>,>=(porovnání pozic)
Příklad použití:
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
// Získání iterátoru na začátek kontejneru
std::vector<int>::iterator it = v.begin();
// Procházení prvků pomocí iterátoru
while (it != v.end()) {
std::cout << *it << " "; // Dereference iterátoru pro přístup k hodnotě
++it; // Přechod na další prvek
}
std::cout << std::endl; // Výstup: 1 2 3 4 5
return 0;
}
Iterátory poskytují abstrakci nad konkrétním typem kontejneru, umožňující algoritmům STL pracovat s různými datovými typy jednotně.