CodeBlanks Logo Icon CodeBlanks

Iterator türleri

Input, output, forward, bidirectional ve random access iterator'ları öğrenirsin.

Iterator türleri

C++ beş iterator kategorisi tanımlar. Her kategori bir öncekinin üstüne yetenek ekler: input (okuma), output (yazma), forward (ileri yönlü, çok geçişli), bidirectional (çift yönlü, -- desteği) ve random access (rastgele erişim, + ve [] desteği).

Kapsayıcı türü,iterator kategorisini belirler. std::vector ve std::array rastgele erişim sağlar. std::list çift yönlü, std::forward_list ileri yönlü, std::istream giriş iterator'udur. Kategori ne kadar güçlüyse o kadar çok işlem desteklenir.

Rastgele erişim iterator

Rastgele erişim iterator, en güçlü kategoridir. İşaretçilerin desteklediği tüm işlemleri sağlar: it + n ile ileri offset, it - n ile geri offset, it2 - it1 ile mesafe ve it[n] ile n. öğeye erişim.

std::vector, std::array ve std::deque bu kategoriyi sağlar. Ayrıca ham işaretçiler de rastgele erişim iterator'udur. Bu yüzden std::sort gibi algoritmalar yalnızca rastgele erişim iterator ister; std::list üzerinde çalışmaz.

Uygulama Rastgele erişim ile öğeye eriş

v = {10, 20, 30, 40} vektöründe v.begin() ile iterator al ve it[2] ile üçüncü öğeyi std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {10, 20, 30, 40};
    // begin() ile iterator al, indeksle eris
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {10, 20, 30, 40};
    auto it = v.begin();
    std::cout << it[2];
    return 0;
}

Beklenen çıktı

30

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kapsayıcıyı iterator kategorisiyle eşle

Kavram Anlamı
std::vector Rastgele erişim
std::list Çift yönlü
std::forward_list İleri yönlü
std::istream Giriş

2 Üçüncü öğeye eriş

Soru
std::vector<int> v = {1, 2, 3};
auto it = v.begin();
std::cout << it[____];
Cevap
std::vector<int> v = {1, 2, 3};
auto it = v.begin();
std::cout << it[2];

Açıklama: it[2] ile üçüncü öğeye (3) erişirsin.

3 Hangi kapsayıcı çift yönlü iterator sağlar?

main.cpp
// cift yonlu iterator: --it desteklenir
  • std::vector
  • std::forward_list
  • std::list Doğru cevap
  • std::array

Açıklama: std::list çift yönlüdür, --it destekler.

Orta seviye bölümündeki tüm dersler