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ü. Bu modern söz dizimi, indislerin elle yönetilmesi gereksinimini ortadan kaldırır ve kodunuzu daha temiz ve okunması daha kolay hâle getirir.

Aralık tabanlı for döngüsü, yineleme ayrıntılarını sizin için otomatik olarak yönetir. 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 tamamen aynı şeyi yapar, ancak çok daha basit bir sözdizimi kullanır. name değişkeni, vektördeki her öğenin değerini sırayla otomatik olarak alır.

Döngü bildiriminde & sembolünü fark etmiş olabilirsin: const std::string& name. Bu bağlamda &, daha önce görmüş olabileceğin "adresi" anlamına gelmez. Burada name değişkenini, vektördeki her öğenin bir kopyasını oluşturmak yerine doğrudan her öğeye yönelik bir referans (takma ad) olarak bildirir. Bunu, aynı veri parçasına yeni bir ad vermek gibi düşünebilirsin; öğeye yönelik bir işaretçi kullanmaya benzer, ancak döngü gövdesi içinde işaretçinin gösterdiği adrese erişmen gerekmez.

const anahtar sözcüğü bir güvenlik önlemidir: döngü gövdesi içindeki takma ad aracılığıyla öğeyi yanlışlıkla değiştirmenizi önler. Takma adın kendisi, her yinelemede bir sonraki öğeye ilerlemeye devam eder. Sabit tutulan şey, takma ad aracılığıyla eriştiğiniz içeriktir; döngünün ilerleyişi değil.

Aralık tabanlı for döngüsü yalnızca daha okunabilir olmakla kalmaz, aynı zamanda daha güvenlidir de — indisleri manuel olarak yönetmediğiniz için indis hatası riski yoktur. Yinelemeyi destekleyen herhangi bir kapsayıcıyla çalışır; bu da onu C++’ta veri koleksiyonlarını işlemek için çok yönlü bir araç hâline getirir.

challenge icon

Görev

Kolay

Şehir adlarından oluşan bir koleksiyonu işleyip bunları karakter sayılarıyla birlikte görüntüleyerek aralık tabanlı 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 n tamsayısı
  • Ardından şehir adlarını temsil eden n dize

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

  1. cities adlı bir std::vector<std::string> oluşturun
  2. n şehir adının her birini vektöre eklemek için push_back() kullanın
  3. Vektör üzerinde yineleme yapmak için aralık tabanlı bir for döngüsü kullanın
  4. Döngüdeki her şehir için, .length() yöntemini kullanarak şehir adını ve ardından uzunluğunu yazdırın
  5. Döngüden sonra, vektörün .size() yöntemini kullanarak işlenen toplam şehir sayısını yazdırın

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

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

Aralık tabanlı for döngüsü, vektördeki her öğe üzerinde yineleme yapmak için for (const std::string& city : cities) söz dizimini kullanmalıdır. Her şehir adındaki karakter sayısını elde etmek 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);
    }
    
    // TODO: Kodunuzu aşağıya yazın
    // cities vektörü üzerinde gezinmek için range-based for döngüsü kullan
    // Belirtilen formatı kullanarak her şehri uzunluğuyla yazdır
    // After the loop, print the total number of cities processed
    
    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

Kendi başına pratik yap: Online C++ derleyicisi