CodeBlanks Logo Icon CodeBlanks

Döngü ve vektör

for ile vektör elemanları üzerinde dönersin.

Döngü ve vektör

Vektörü dolaşmanın üç yolu, üç farklı sahiplik anlamına gelir:

let mut v = vec![1, 2, 3];
for x in &v { println!("{x}"); }        // &i32: okur
for x in &mut v { *x *= 2; }             // &mut i32: değiştirir
for x in v { println!("{x}"); }         // i32: tüketir, v artık yok

Konuma da ihtiyacın varsa enumerate kullan: for (i, x) in v.iter().enumerate().

Yineleyici yöntemleri

Döngü yerine yineleyici yöntemleri çoğu zaman daha açıktır:

let notlar = vec![70, 85, 90, 45];
let toplam: i32 = notlar.iter().sum();
let gecen: Vec<&i32> = notlar.iter().filter(|&&n| n >= 50).collect();
let artirilmis: Vec<i32> = notlar.iter().map(|n| n + 5).collect();
println!("{toplam} {:?} {:?}", gecen, artirilmis);
// 290 [70, 85, 90] [75, 90, 95, 50]

Uygulama Zam ve liste

let mut fiyat = vec![100, 250, 40]; için for f in &mut fiyat ile her fiyata kendisinin onda birini ekle. Sonra enumerate ile 1: 110 biçiminde (sıra 1'den başlasın) her satırı yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    let mut fiyat = vec![100, 250, 40];
    for f in &mut fiyat {
        *f += *f / 10;
    }
    for (i, f) in fiyat.iter().enumerate() {
        println!("{}: {}", i + 1, f);
    }
}

Beklenen çıktı

1: 110
2: 275
3: 44

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Döngü içinde <code>v.push(..)</code> çağırırken <code>for x in &amp;v</code> neden hata verir?

  • push döngüde yasak
  • x yanlış türde
  • Hata vermez
  • Döngü v'yi ödünç alırken değiştirilemez Doğru cevap

Açıklama: Büyüyen vektör yeni belleğe taşınabilir ve döngünün referansları geçersiz kalırdı; borrow checker bunu engeller.

2 Konumla dolaş

Soru
for (i, x) in v.iter().____() {
    println!("{i}: {x}");
}
Cevap
for (i, x) in v.iter().enumerate() {
    println!("{i}: {x}");
}

Açıklama: enumerate her elemanı (indeks, eleman) ikilisi olarak verir.

3 Döngü ve x türü

Kavram Anlamı
for x in &v &i32
for x in &mut v &mut i32
for x in v i32 (tüketir)
for (i, x) in v.iter().enumerate() (usize, &i32)

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma