Sobes.tech
Junior

STL standart şablon kitabxanasında iterator nədir?

sobes.tech Süni İntellekt

AI-dan cavab

STL-də iterator ümumi anlayışdır və konteynerin (məsələn, vector, list, map) elementlərinə ardıcıl şəkildə daxil olmağı təmin edir, konteynerin daxili strukturunu açmadan. Bu, elementə işarə edən göstəriciyə bənzəyir, lakin iteratorin kateqoriyasına görə əlavə imkanlara malikdir.

Iteratorin əsas funksiyaları:

  • Mövcud elementə daxil olmaq (*it).
  • Növbəti elementə keçmək (++it).
  • Digər iterator ilə müqayisə etmək (məsələn, ardıcıllığın sonunu müəyyən etmək üçün it != end()).

Iterator kateqoriyaları (imkanların genişlənmə sırasına görə):

  1. Input Iterator: Yalnız bir dəfə elementləri oxuya bilər (məsələn, axından giriş). *it (oxuma üçün), ++it, it == başqa dəstəkləyir.
  2. Output Iterator: Yalnız bir dəfə elementləri yaza bilər (məsələn, axına çıxış). *it (yazmaq üçün), ++it dəstəkləyir.
  3. Forward Iterator: Bir neçə dəfə elementləri oxuyub yaza bilər və yalnız irəliyə hərəkət edə bilər. *it (oxuma/yazma), ++it, it == başqa dəstəkləyir.
  4. Bidirectional Iterator: İrəli və geri hərəkət edə bilər. Bütün Forward Iterator əməliyyatlarını və --it dəstəkləyir.
  5. Random Access Iterator: Bir addımda istənilən sayda elementə hərəkət edə bilər (işarəçilər kimi). Bütün Bidirectional Iterator əməliyyatlarını və əlavə:
    • it + n, it - n (n elementə hərəkət)
    • it += n, it -= n
    • it[n] (n ötürmə ilə elementə daxil olmaq)
    • it < başqa, <=, >, >= (mövqeləri müqayisə etmək)

İstifadə nümunəsi:

#include <vector>
#include <iostream>

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

    // Kontainerin başlanğıcına iterator əldə et
    std::vector<int>::iterator it = v.begin();

    // Iterator ilə elementləri keçmək
    while (it != v.end()) {
        std::cout << *it << " "; // Elementə daxil olmaq üçün iteratoru dereferensiya et
        ++it; // Növbəti elementə keç
    }
    std::cout << std::endl; // Çıxış: 1 2 3 4 5

    return 0;
}

Iteratorlər konteynerin konkret növü üzərində abstraksiya təmin edir və STL alqoritmlərinin müxtəlif məlumat tipləri ilə eynidirsə işləməsinə imkan verir.