Vec

Vec, standart yeniden boyutlandırılabilir dinamik bellekten tahsis edilen arabellektir (heap-allocated buffer):

fn main() {
    let mut v1 = Vec::new();
    v1.push(42);
    println!("v1: uzunluk = {}, kapasite = {}", v1.len(), v1.capacity());

    let mut v2 = Vec::with_capacity(v1.len() + 1);
    v2.extend(v1.iter());
    v2.push(9999);
    println!("v2: uzunluk = {}, kapasite = {}", v2.len(), v2.capacity());

    // Bir vektörü elemanlarla ilklendirmek (initialize) için standart makro.
    let mut v3 = vec![0, 0, 1, 2, 3, 4];

    // Sadece çift elemanları tut.
    v3.retain(|x| x % 2 == 0);
    println!("{v3:?}");

    // Ardışık kopyaları sil.
    v3.dedup();
    println!("{v3:?}");
}

Vec, Deref<Target = [T]> özelliğini gerçekleştirir (implement), bu da bir Vec üzerinde dilim (slice) metotlarını çağırabileceğiniz anlamına gelir.

This slide should take about 5 minutes.
  • Vec, String ve HashMap ile birlikte bir koleksiyon türüdür. İçerdiği veriler dinamik bellekte (heap) saklanır. Bu, veri miktarının derleme zamanında bilinmesi gerekmediği anlamına gelir. Çalışma zamanında büyüyebilir veya küçülebilir.
  • Vec<T>’nin de genelleştirilmiş (generic) bir tür olduğuna, ancak T’yi açıkça belirtmek zorunda olmadığınıza dikkat edin. Rust tür çıkarımında (type inference) her zaman olduğu gibi, T ilk push çağrısı sırasında belirlenmiştir.
  • vec![...], Vec::new() yerine kullanılacak standart bir makrodur ve vektöre başlangıç elemanları eklemeyi destekler.
  • Vektörün elemanlarına erişmek için [ ] kullanırsınız, ancak sınırlar dışındaysa paniğe (panic) neden olurlar. Alternatif olarak, get kullanmak bir Option geri döndürür. pop fonksiyonu son elemanı siler.
  • Dilimler (slices) 3. günde ele alınacak. Şimdilik, öğrencilerin sadece Vec türündeki bir değerin, belgelenmiş tüm dilim (slice) metotlarına da erişim sağladığını bilmeleri yeterlidir.