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ı
| Özellik | std::array / C-Dizisi | std::vector |
|---|---|---|
| Boyut | Sabittir, değiştirilemez. | Dinamiktir, otomatik büyür. |
| Bellek Yönetimi | Genellikle Stack. | Heap (Dinamik bellek). |
| Erişim Hızı | Çok Hızlı. | Çok Hızlı (Neredeyse aynı). |
| Güvenlik | Sı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.