Vector: Dinamik Boyutlu Dizilerle Çalışma Rehberi

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
234
Tepkime puanı
2
Puanları
18
Rust'ta dizilerin (Arrays) boyutu sabittir, ancak gerçek dünyada veriler genellikle dinamiktir. İşte bu noktada devreye Vector (Vec<T>) girer. Vektörler, çalışma zamanında büyüyüp küçülebilen, aynı tipteki verileri yan yana saklayan dinamik dizilerdir.
Vektörler veriyi Heap (öbek) üzerinde saklar, bu da onlara esneklik kazandırır.

1. Vektör Oluşturma​

Bir vektör oluşturmanın en yaygın iki yolu vardır:
  • Vec::new(): Boş bir vektör oluşturur. Veri ekledikçe tipi netleşir.
  • vec![] makrosu: Başlangıç değerleri ile vektör oluşturmanın kısa yoludur.
Rust
Kod:
let mut sayilar: Vec<i32> = Vec::new(); // Boş vektör
let renkler = vec!["Kırmızı", "Yeşil", "Mavi"]; // Başlangıç değerli vektör

2. Veri Ekleme ve Güncelleme​

Bir vektöre veri eklemek için değişkenin mut (mutable) olması gerekir. push metodu veriyi vektörün sonuna ekler.
Rust
Kod:
let mut v = Vec::new();

v.push(5);
v.push(6);
v.push(7); // v şimdi [5, 6, 7] oldu

3. Veriye Erişme: İndis mi, .get() mi?​

Vektör elemanlarına erişirken Rust bize iki seçenek sunar. Aralarındaki fark, hata yönetimi felsefesini yansıtır:
  1. İndis Operatörü ([]): Eğer verdiğiniz indis vektörün dışındaysa program panic! yapar (çöker). Kesin eminseniz kullanın.
  2. .get() Metodu: Geriye bir Option<&T> döndürür. İndis dışındaysa None döner, çökme olmaz.
Rust
Kod:
let v = vec![1, 2, 3, 4, 5];

// 1. Yöntem: Panik riski taşır
let ucuncu = &v[2]; 

// 2. Yöntem: Güvenli (Hata yönetimi yapılabilir)
match v.get(2) {
    Some(deger) => println!("Üçüncü eleman: {}", deger),
    None => println!("Eleman bulunamadı."),
}

4. Vektör Üzerinde Gezinme (Iterating)​

Vektördeki her bir elemanı işlemek için for döngüsü kullanılır. Eğer elemanları değiştirmek istiyorsanız mutable referans (&mut) kullanmalısınız.
Rust
Kod:
let mut v = vec![10, 20, 30];

for i in &mut v {
    *i += 50; // Dereference (*) ile değeri güncelliyoruz
}
// v artık [60, 70, 80]

5. Kapasite (Capacity) ve Uzunluk (Length)​

Vektörlerin arkasında bir Kapasite yönetimi vardır. Vektör dolduğunda, Rust bellekte daha büyük bir yer ayırır ve verileri oraya taşır. Bu taşıma işlemi maliyetli olduğu için, kaç eleman ekleyeceğinizi önceden biliyorsanız Vec::with_capacity(n) kullanarak performansı artırabilirsiniz.

Özet: Dizi mi, Vektör mü?​

ÖzellikArray (Dizi)Vector (Vektör)
BoyutSabit (Derleme zamanı)Dinamik (Çalışma zamanı)
BellekStack (Genellikle)Heap
HızÇok hızlı (Sıfır ek yük)Hızlı (Küçük bir yönetim yükü)
KullanımBoyut hiç değişmeyecekseListe uzunluğu belirsizse
 
Geri
Üst