with_capacity
- Rust kursu
- Başlangıç
- Ders 98/115
- 4 dk
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 truereserve 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ırBü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
fn main() {
// buraya yaz
}Örnek çözüm
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
let mut v = Vec::____(10);
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 |