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.
Görev
KolayBir ş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
nadet dize (string)
Programınız şunları yapmalıdır:
citiesadında birstd::vector<std::string>oluşturunnadet şehir isminin her birini vektöre eklemek içinpush_back()kullanın- Vektör üzerinde gezinmek için range-based bir for döngüsü kullanın
- Döngüdeki her şehir için, şehir adını ve ardından
.length()metodunu kullanarak uzunluğunu yazdırın - 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;
}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 Ekleme