Menu
Coddy logo textTech

Aralık Tabanlı For Döngüsü

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 15 / 56.

İndisli geleneksel for döngüleri vektörler üzerinde yineleme yapmak için iyi çalışsa da, C++ daha zarif bir çözüm sunar: aralık tabanlı for döngüsü (range-based for loop). Bu modern sözdizimi, manuel indis yönetimi ihtiyacını ortadan kaldırır ve kodunuzu daha temiz ve okunması daha kolay hale getirir.

Aralık tabanlı (range-based) for döngüsü, yineleme ayrıntılarını sizin için otomatik olarak halleder. Bir dizin değişkenini yönetmek yerine, her bir öğeyle ne yapmak istediğinizi belirtmeniz yeterlidir:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}

Bu döngü, geleneksel dizin tabanlı yaklaşımla tam olarak aynı şeyi yapar, ancak çok daha basit bir sözdizimine sahiptir. name değişkeni, vektördeki her bir öğenin değerini sırayla otomatik olarak alır.

Döngü bildirimindeki & sembolünü fark edebilirsiniz — const std::string& name. Bu bağlamda &, daha önce görmüş olabileceğiniz gibi "adresi" (address of) anlamına gelmez. Burada name değişkenini, vektördeki her bir öğenin bir kopyasını oluşturmak yerine, doğrudan o öğeye bir referans (bir takma ad) olarak bildirir. Bunu aynı veri parçasına yeni bir isim vermek gibi düşünün; öğeye bir işaretçi (pointer) kullanmaya benzer, ancak döngü gövdesi içinde başvuruyu çözmeye (dereference) gerek kalmaz.

const anahtar kelimesi bir güvenlik önlemidir: döngü gövdesi içindeki takma ad (alias) aracılığıyla öğeyi yanlışlıkla değiştirmenizi engeller. Takma adın kendisi her yinelemede her yeni öğeye ilerlemeye devam eder — sabit tutulan şey döngünün ilerleyişi değil, takma ad aracılığıyla eriştiğiniz içeriktir.

Aralık tabanlı for döngüsü sadece daha okunabilir değil, aynı zamanda daha güvenlidir; indeksleri manuel olarak yönetmediğiniz için indeks hatası riski yoktur. Yinelemeyi destekleyen her türlü konteyner ile çalışır, bu da onu C++'da veri koleksiyonlarını işlemek için çok yönlü bir araç haline getirir.

challenge icon

Görev

Kolay

Bir şehir isimleri koleksiyonunu işleyerek ve bunları karakter sayılarıyla birlikte görüntüleyerek range-based for döngüsünü gösteren bir program oluşturun.

Aşağıdaki girdiler sağlanacaktır:

  • Şehir sayısını temsil eden bir tam sayı n
  • Ardından şehir isimlerini temsil eden n adet dize (string)

Programınız şunları yapmalıdır:

  1. cities adında bir std::vector<std::string> oluşturun
  2. n adet şehir isminin her birini vektöre eklemek için push_back() kullanın
  3. Vektör üzerinde gezinmek için range-based bir for döngüsü kullanın
  4. Döngüdeki her şehir için, şehir adını ve ardından .length() metodunu kullanarak uzunluğunu yazdırın
  5. Döngüden sonra, vektörün .size() metodunu kullanarak işlenen toplam şehir sayısını yazdırın

Aşağıdaki tam çıktı formatını kullanın:

City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]

Range-based for döngüsü, vektördeki her bir öğe üzerinde gezinmek için for (const std::string& city : cities) sözdizimini kullanmalıdır. Her şehir ismindeki karakter sayısını almak için city.length() kullanın.

Kendin dene

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // Şehir sayısını oku
    int n;
    cin >> n;
    
    // Şehir isimlerini saklamak için bir vektör oluştur
    vector<string> cities;
    
    // Şehir isimlerini oku ve vektöre ekle
    for (int i = 0; i < n; i++) {
        string city;
        cin >> city;
        cities.push_back(city);
    }
    
    // YAPILACAK: Kodunuzu aşağıya yazın
    // Şehirler vektörü üzerinde gezinmek için aralık tabanlı bir for döngüsü kullanın
    // Belirtilen formatı kullanarak her şehri uzunluğuyla birlikte yazdırın
    // Döngüden sonra, işlenen toplam şehir sayısını yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler