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.
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
ntamsayısı - Ardından şehir adlarını temsil eden
ndize
Programınız şunları yapmalıdır:
citiesadlı birstd::vector<std::string>oluşturunnşehir adının her birini vektöre eklemek içinpush_back()kullanın- Vektör üzerinde yineleme yapmak için aralık tabanlı bir for döngüsü kullanın
- Döngüdeki her şehir için,
.length()yöntemini kullanarak şehir adını ve ardından uzunluğunu yazdırın - 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;
}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
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev EklemeKendi başına pratik yap: Online C++ derleyicisi