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.
İndeksli geleneksel for döngüleri vektörler üzerinde gezinmek için iyi çalışsa da, C++ daha zarif bir çözüm sunar: aralık tabanlı (range-based) for döngüsü. Bu modern sözdizimi, manuel indeks 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 yerinize otomatik olarak halleder. Bir dizin (index) 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.
const std::string& name ifadesindeki & işaretine dikkat edin. Burada &, daha önce görmüş olabileceğiniz gibi "adresi" anlamına gelmez — bu tür bir değişken bildiriminde, referans (veya takma ad) anlamına gelir. Her bir öğeyi kopyalamak yerine, name, bir işaretçi (pointer) kullanmaya benzer şekilde ancak döngü gövdesi içinde başvuru çözmeye (dereference) gerek kalmadan, doğrudan vektördeki öğeye başvuran bir takma ad haline gelir.const anahtar kelimesi bir güvenlik önlemidir: döngü gövdesi içinde takma ad aracılığıyla öğeyi yanlışlıkla değiştirmenizi engelleyerek orijinal vektör verilerini değişmeden tutar.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. İterasyonu destekleyen her türlü kapsayıcı 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 adları 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 adlarını temsil eden
nadet dize (string)
Programınız şunları yapmalıdır:
citiesadında birstd::vector<std::string>oluşturunnadet şehir adının 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()yöntemini kullanarak 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ı 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 adındaki karakter sayısını almak için city.length() kullanın.
Kopya kağıdı
Aralık tabanlı for döngüsü (range-based for loop), manuel dizin yönetimi olmadan bir kapsayıcı üzerinde yinelenir:
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const std::string& name : names) {
std::cout << name << std::endl;
}&,namedeğişkenini her bir öğeye bir referans (takma ad) olarak bildirir — kopyalama yapılmazconst, döngü gövdesi içindeki öğenin yanlışlıkla değiştirilmesini önler- Yinelemeyi (iteration) destekleyen her türlü kapsayıcı ile çalışır
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