CodeBlanks Logo Icon CodeBlanks

Range-based for

Range-based for ve iterator ilişkisini öğrenirsin.

Range-based for

Range-based for döngüsü, iterator tabanlı döngünün kısa yazımıdır: for (auto x : v) { ... }. Derleyici arka planda v.begin() ve v.end() çağırır, döngü değişkenine her öğeyi sırayla atar.

Yani for (auto x : v) aslında for (auto it = v.begin(); it != v.end(); ++it) { auto x = *it; ... } ile eşdeğerdir. Bu yüzden iterator destekleyen her kapsayıcıda range-based for çalışır. Daha az yazım hatası yaparsın ve kod daha okunaklı olur.

Referans ve kopya

Range-based for'da auto x öğenin kopyasıdır; x üzerinde yapılan değişiklik v'yi etkilemez ve büyük öğelerde performans kaybı yaratır. auto& x ise referans alır; x'i değiştirmek v'deki öğeyi değiştirir ve kopya maliyeti yoktur.

Yalnızca okuma yapacaksan const auto& x kullan. Bu hem kopya maliyetini önler hem de yanlışlıkla değiştirmeyi engeller. Modern C++'ta bu üç kullanım çok yaygındır: auto, auto&, const auto&.

Uygulama Range-based for ile ikiye katla

v = {1, 2, 3} vektöründe for (auto& x : v) ile her öğeyi ikiye katla. Sonra ayrı bir for (int x : v) ile her öğeyi boşlukla yazdır.

Başlangıç kodu

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

int main() {
    std::vector<int> v = {1, 2, 3};
    // range-based for ile her ögeyi ikiye katla, sonra yazdir
    return 0;
}

Örnek çözüm

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

int main() {
    std::vector<int> v = {1, 2, 3};
    for (auto& x : v) {
        x = x * 2;
    }
    for (int x : v) {
        std::cout << x << " ";
    }
    return 0;
}

Beklenen çıktı

2 4 6

Soru ve cevaplar

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

1 for (auto x : v) ne yapar?

main.cpp
std::vector<int> v = {1, 2, 3};
for (auto x : v) { }
  • Sonsuz döngü oluşturur
  • v'nin kopyasını oluşturur
  • v'yi kalıcı olarak değiştirir
  • Her öğeyi x'e kopyalayıp döner Doğru cevap

Açıklama: Her öğe sırayla x'e kopyalanır.

2 Range-based for sözdizimini tamamla

Soru
for (auto ____ : v) {
    std::cout << x;
}
Cevap
for (auto x : v) {
    std::cout << x;
}

Açıklama: for (auto x : v) by-value döngü oluşturur.

3 Kullanımı amacıyla eşle

Kavram Anlamı
for (auto x : v) Kopya döngü
for (auto& x : v) Referans döngü
for (const auto& x : v) Salt okunur
v.begin(), v.end() Arka planda çağrılır

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