CodeBlanks Logo Icon CodeBlanks

Özet - Iterator'lar

begin/end ve aritmetiği birleştirerek bir arama fonksiyonu yazarsın.

Özet - Iterator'lar

Bu grupta iterator'ın ne olduğunu, begin/end aralığını, beş kategoriyi, range-based for'u ve aritmetiği öğrendin. Şimdi bunları birleştirerek bir arama fonksiyonu yazacağız.

Arama, std::find ile başlar: auto it = std::find(v.begin(), v.end(), 30);. Bulunan iterator'ı indekse çevirmek için std::distance(v.begin(), it) kullanılır. Öğe bulunamazsa iterator v.end()'e eşit olur; bu durumu if (it != v.end()) ile ayırt ederiz.

Uygulama Ara ve indeksi yazdır

v = {10, 20, 30, 40} vektöründe std::find ile 30'u ara. std::distance(v.begin(), it) ile indeksini hesaplayıp std::cout ile yazdır.

Başlangıç kodu

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

int main() {
    std::vector<int> v = {10, 20, 30, 40};
    // std::find ile 30'u ara, std::distance ile indeksi yazdir
    return 0;
}

Örnek çözüm

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

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

Beklenen çıktı

2

Uygulama Bulundu mesajı ekle

Önceki adımın std::find ve std::distance çağrılarını al. İndeksten sonra if (it != v.end()) ile "bulundu", aksi halde "yok" yazdır. İndeks ile mesajı ayrı satırlara koy.

Başlangıç kodu

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

int main() {
    std::vector<int> v = {10, 20, 30, 40};
    auto it = std::find(v.begin(), v.end(), 30);
    std::cout << std::distance(v.begin(), it);
    // bulunursa "bulundu", bulunmazsa "yok" yazdir
    return 0;
}

Örnek çözüm

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

int main() {
    std::vector<int> v = {10, 20, 30, 40};
    auto it = std::find(v.begin(), v.end(), 30);
    std::cout << std::distance(v.begin(), it);
    if (it != v.end()) {
        std::cout << "\nbulundu";
    } else {
        std::cout << "\nyok";
    }
    return 0;
}

Beklenen çıktı

2
bulundu

Iterator'ları özetle

Iterator'lar STL'in temel taşıdır. begin/end yarım açık aralığı tüm kapsayıcılar ve algoritmalar için ortaktır. Beş kategori (input, output, forward, bidirectional, random access) kapsayıcı türüne göre belirlenir.

Range-based for arka planda iterator kullanır. Rastgele erişim iterator'lar +n, -n, [] destekler. std::find ve std::distance ile arama yapıp indeks bulabilirsin. Bir sonraki grupta STL algoritmalarını ayrıntılı olarak öğreneceksin.

Soru ve cevaplar

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

1 Bir iterator'ı indekse dönüştürmek için ne kullanılır?

main.cpp
auto it = std::find(v.begin(), v.end(), 30);
  • std::count
  • std::distance Doğru cevap
  • std::sort
  • std::copy

Açıklama: std::distance(begin, it) indeksi verir.

2 std::find çağrısını tamamla

Soru
auto it = std::____(v.begin(), v.end(), 30);
Cevap
auto it = std::find(v.begin(), v.end(), 30);

Açıklama: std::find ile değer araması yapılır.

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