CodeBlanks Logo Icon CodeBlanks

with_capacity

with_capacity ile önceden yer ayırarak performans kazanırsın.

with_capacity

Vektörün uzunluğu (len) içindeki eleman sayısı, kapasitesi (capacity) yeniden bellek ayırmadan alabileceği eleman sayısıdır. Kapasite dolunca vektör daha büyük bir alan ayırıp elemanları taşır. Kaç eleman geleceğini biliyorsan baştan ayırmak bu taşımaları önler:

let mut v = Vec::with_capacity(10);
for i in 0..5 { v.push(i); }
println!("{} {}", v.len(), v.capacity() >= 10);   // 5 true

reserve ve shrink_to_fit

Var olan bir vektörde de kapasite yönetilebilir:

let mut v: Vec<u8> = Vec::new();
v.reserve(1000);       // en az 1000 ek eleman için yer
v.extend([1, 2, 3]);
v.shrink_to_fit();     // kapasiteyi uzunluğa yaklaştırır

Büyüme genellikle kapasiteyi ikiye katlayarak yapılır; bu sayede push ortalamada O(1) olur. Kesin kapasite değerleri bir uygulama ayrıntısıdır; kodun yalnızca "en az" garantisine güvenmeli.

Uygulama Kapasiteli vektör

Vec::with_capacity(10) ile bir vektör oluştur, 0..5 aralığındaki her i için i * i ekle. Uzunluğu, capacity() >= 10 sonucunu ve vektörü tek satırda yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn main() {
    let mut v = Vec::with_capacity(10);
    for i in 0..5 {
        v.push(i * i);
    }
    println!("{} {} {:?}", v.len(), v.capacity() >= 10, v);
}

Beklenen çıktı

5 true [0, 1, 4, 9, 16]

Soru ve cevaplar

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

1 <code>Vec::with_capacity(100)</code> sonrasında <code>len()</code> nedir?

  • 1
  • Belirsiz
  • 0 Doğru cevap
  • 100

Açıklama: with_capacity yalnızca yer ayırır, eleman eklemez; v[0] hâlâ panic verir.

2 Yer ayır

Soru
let mut v = Vec::____(10);
Cevap
let mut v = Vec::with_capacity(10);

Açıklama: with_capacity baştan belirtilen sayıda eleman için yer ayırır.

3 Kavram ve anlamı

Kavram Anlamı
len() Eleman sayısı
capacity() Ayrılmış yer
reserve(n) En az n ek yer
shrink_to_fit() Fazla yeri bırakır

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