Vectors (Vektörler): Dinamik Dizilerin Efektif Kullanımı

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

std::vector: Esnek ve Güçlü Dinamik Diziler​


Vektörler, arka planda elemanları bellekte yan yana (contiguous) tutarlar. Bu da onlara hem diziler kadar hızlı erişim imkanı verir hem de dinamik olarak büyüme esnekliği kazandırır.



1. Vektör Tanımlama ve Başlatma​


Vektörleri kullanmak için <vector> kütüphanesini eklemeniz gerekir. Şablon (template) yapısı sayesinde her türlü veri tipini tutabilirler.

C++:
#include <vector>

std::vector<int> sayilar; // Bos bir vektor
std::vector<string> isimler = {"Ali", "Veli", "Ayse"}; // Initializer list ile baslatma
std::vector<int> beslik(10, 5); // 10 adet 5 degerine sahip eleman



2. Temel Fonksiyonlar ve Manipülasyon​


Vektörlerin en büyük avantajı, içindeki veriyi yönetmek için sunduğu zengin fonksiyonlardır:

push_back(): Sona yeni bir eleman ekler.

pop_back(): Sondaki elemanı siler.

size(): İçindeki güncel eleman sayısını verir.

at() veya [ ]: Belirli bir indeksteki elemana erişir (at hata kontrolü yapar).

clear(): Tüm elemanları siler.

C++:
sayilar.push_back(10);
sayilar.push_back(20);

cout << "Eleman sayisi: " << sayilar.size(); // 2
cout << "Ilk eleman: " << sayilar[0]; // 10



3. Vektörlerin Arka Planı: Capacity vs. Size​


Vektörlerin nasıl büyüdüğünü anlamak performans açısından kritiktir. Bir vektör dolduğunda, arka planda daha büyük bir bellek alanı ayırır ve eski verileri oraya taşır.

Size: Vektörün içindeki aktif eleman sayısı.

Capacity: Vektörün yeniden yer ayırmadan (reallocation) tutabileceği maksimum eleman sayısı.

Performans İpucu: Eğer vektörün ne kadar büyüyeceğini önceden biliyorsanız, reserve() fonksiyonunu kullanarak kapasiteyi önceden ayırabilir ve gereksiz bellek kopyalamalarının önüne geçebilirsiniz.



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


Modern C++ ile vektörlerin içinde gezmek oldukça kolaylaşmıştır:

C++:
// 1. Range-based for loop (En moderni)
for (int x : sayilar) {
cout << x << " ";
}

// 2. Iterator kullanarak
for (auto it = sayilar.begin(); it != sayilar.end(); ++it) {
cout << *it << " ";
}



Vektör ve Standart Dizi Karşılaştırması​


Özellikstd::array / C-Dizisistd::vector
BoyutSabittir, değiştirilemez.Dinamiktir, otomatik büyür.
Bellek YönetimiGenellikle Stack.Heap (Dinamik bellek).
Erişim HızıÇok Hızlı.Çok Hızlı (Neredeyse aynı).
GüvenlikSınır kontrolü yoktur..at() ile sınır kontrolü yapılabilir.



Sonuç​


std::vector, C++'ın en dengeli konteyneridir. Rastgele erişim hızı (O(1)) ve sonuna eleman ekleme performansı (amortized O(1)) sayesinde çoğu senaryoda varsayılan tercihiniz olmalıdır. Ancak listenin başına veya ortasına çok sık eleman eklemeniz gerekiyorsa std::list gibi alternatifleri değerlendirmek gerekebilir.
 
Geri
Üst