Sobes.tech
Junior

STL standart shablon kutubxonalarida iterator nima?

sobes.tech AI

AIdan javob

STL'dagi iterator - bu umumiy tushuncha bo'lib, konteyner elementlariga (masalan, vector, list, map) ketma-ket kirish imkonini beradi, konteynerning ichki tuzilmasini ochmasdan. Bu elementga ko'rsatkichga o'xshaydi, ammo iteratorning toifasiga qarab qo'shimcha imkoniyatlarga ega.

Iteratorning asosiy funksiyalari:

  • Joriy elementga kirish (*it).
  • Keyingi elementga o'tish (++it).
  • Boshqa iterator bilan taqqoslash (masalan, ketma-ketlikning oxirini aniqlash uchun it != end()).

Iterator toifalari (quyidagi tartibda imkoniyatlar kengaytiriladi):

  1. Input Iterator: Bir marta elementlarni o'qiy oladi (masalan, oqimdan kirish). *it (o'qish uchun), ++it, it == boshqa ni qo'llab-quvvatlaydi.
  2. Output Iterator: Bir marta elementlarni yozish mumkin (masalan, oqimga chiqarish). *it (yozish uchun), ++it ni qo'llab-quvvatlaydi.
  3. Forward Iterator: Bir nechta marta elementlarni o'qish va yozish mumkin va faqat oldinga harakatlana oladi. *it (o'qish/yozish), ++it, it == boshqa ni qo'llab-quvvatlaydi.
  4. Bidirectional Iterator: Oldinga va orqaga harakatlana oladi. Barcha Forward Iterator operatsiyalarini va --it ni qo'llab-quvvatlaydi.
  5. Random Access Iterator: Bir qadamda istalgan elementlar soniga o'ta oladi (poytaxtlar kabi). Barcha Bidirectional Iterator operatsiyalarini va qo'shimcha:
    • it + n, it - n (n elementga o'tish)
    • it += n, it -= n
    • it[n] (n ta elementdan iborat elementga kirish)
    • it < boshqa, <=, >, >= (pozitsiyalarni taqqoslash)

Foydalanish misoli:

#include <vector>
#include <iostream>

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

    // Kontainer boshlanishiga iterator olish
    std::vector<int>::iterator it = v.begin();

    // Iterator yordamida elementlarni aylanib chiqish
    while (it != v.end()) {
        std::cout << *it << " "; // Elementga kirish uchun iteratorni dereferensiya qilish
        ++it; // Keyingi elementga o'tish
    }
    std::cout << std::endl; // Chiqish: 1 2 3 4 5

    return 0;
}

Iteratorlar konteynerning aniq turiga nisbatan abstraktsiya taqdim etadi, bu STL algoritmlarining turli ma'lumot turlari bilan bir xil ishlashini ta'minlaydi.