Ana içeriğe geç

C++ 2D Vektörler


Bu Rehberde Ne Öğreneceksiniz?

Bu rehber, C++ Standard Template Library (STL) kullanarak İki Boyutlu Vektörler (2D Vectors) oluşturmayı öğretir.
Dizilerden farklı olarak 2D vektörler dinamik boyutlara sahiptir, bu sayede çalışma anında veri ekleme, silme ve yeniden boyutlandırma yapılabilir.
Matris, tablo veya çizge (graph) yapılarında yüksek performanslı veri yönetimi sağlamak için idealdir.


2D Vektör Kavramı

2D vektör, aslında vektörlerin vektörüdür.
Her satır (vector<int>) kendi başına bir vektördür ve dış vektör bunları barındırır:

vector<vector<int>> tablo {{1, 2, 3}, {4, 5}, {6, 7, 8}};
  • Not: Satırlar farklı uzunlukta olabilir; bu yapı “jagged array” olarak adlandırılır.

1. Gerekli Kütüphaneler

C++’ta vektörleri kullanmak için şu başlık dosyasını dahil edin:


#include <vector>
Tüm STL kütüphanelerini tek seferde dahil etmek isterseniz:


#include <bits/stdc++.h>

2. 2D Vektör Oluşturma ve Başlatma

1. Statik Başlatma (Değerler Biliniyorken)

Değerlerinizi önceden biliyorsanız, doğrudan başlatabilirsiniz:


#include <iostream>
#include <vector>
using namespace std;

int main() {
vector<vector<int>> matris {{10, 20, 30}, {40, 50}, {60, 70, 80}};

for (int i = 0; i < matris.size(); i++) {
for (int j = 0; j < matris[i].size(); j++)
cout << matris[i][j] << " ";
cout << endl;
}
}
Çıktı:

10 20 30
40 50
60 70 80

2. Boyut Belirterek Başlatma

Satır/sütun sayısını bilip tüm elemanları aynı değerle başlatmak için:


int satir = 4, sutun = 3;
vector<vector<int>> tablo(satir, vector<int>(sutun, 0));
Çıktı:


0 0 0
0 0 0
0 0 0
0 0 0
  • vector<int>(sutun, 0) → her satır için 3 sütun oluşturur, tüm hücrelere 0 atar. tablo(satir, …) → bu yapıyı 4 satır olarak tekrarlar.

3. Boş 2D Vektör

Dinamik olarak veri eklemek istiyorsanız boş oluşturabilirsiniz:


vector<vector<int>> tablo;

3. 2D Vektörde Dolaşma

For Döngüsüyle

for (int i = 0; i < tablo.size(); i++) {
for (int j = 0; j < tablo[i].size(); j++)
cout << tablo[i][j] << " ";
cout << endl;
}

Iterator ile:


vector<vector<int>> tablo {{1, 0, 1}, {0, 1}, {1, 0, 1}};
vector<vector<int>>::iterator itSatir;
vector<int>::iterator itSutun;

for (itSatir = tablo.begin(); itSatir != tablo.end(); itSatir++) {
for (itSutun = itSatir->begin(); itSutun != itSatir->end(); itSutun++)
cout << *itSutun << " ";
cout << endl;
}
  • begin() → başlangıç iteratoru end() → sonrasını işaret eden iterator

4. 2D Vektöre Eleman Ekleme

push_back() – Yeni Satır Ekleme


vector<vector<int>> v;
v.push_back({10, 0, 10});
v.push_back({0, 5});
v.push_back({7, 8, 9});
Çıktı:


10 0 10
0 5
7 8 9

insert() – Belirli Konuma Ekleme


auto it = v.begin();
v.insert(it + 1, {1, 2, 3}); // 2. satıra ekler
Çıktı:


10 0 10
1 2 3
0 5
7 8 9
  • insert() fonksiyonu bir iterator alır, index değil.

5. Eleman Silme

pop_back() – Son Satırı Silme


v.pop_back();

erase() – Belirli Satırı Silme


v.erase(v.begin() + 1);

clear() – Tümünü Temizleme


v.clear();

Teknik Özellikler Tablosu

ÖzellikAçıklama
Veri Yapısıvector<vector<T>> (iç içe dinamik yapı)
Varsayılan Başlatmavector<vector<int>>(satir, vector<int>(sutun, 0))
Ekleme Fonksiyonlarıpush_back(), insert()
Silme Fonksiyonlarıpop_back(), erase(), clear()
Dolaşımİç içe for döngüsü veya iterator
Zaman KarmaşıklığıO(N × M) (satır × sütun)
KapsamMatris, grafik, tablo veri yapıları

Sıkça Sorulan Sorular (SSS)

  1. 2D Dizi yerine 2D Vektör neden kullanılır?

Çünkü vektörler dinamiktir, diziler sabit boyutludur. Program çalışırken boyut değiştirebilir, veri ekleyip silebilirsiniz.

  1. Satırlar farklı uzunlukta olabilir mi?

Evet. Her iç vektör bağımsızdır, farklı sütun sayısına sahip olabilir.

  1. 2D vektöre tek bir sayı ekleyebilir miyim?

Hayır, sadece alt vektöre (v[i].push_back(x)) eklenebilir.

  1. 2D vektörlerin kapasitesini nasıl öğrenirim?

v.size() → satır sayısı, v[i].size() → sütun sayısı.

  1. clear() belleği tamamen sıfırlar mı?

Hayır, kapasiteyi korur ama elemanları kaldırır.


Sonuç

C++’ta 2D vektörler, matris, grafik ve tablo yapıları gibi çok boyutlu verilerle çalışmak için en esnek çözümlerden biridir. Sabit boyutlu dizilere göre çok daha dinamik ve güvenlidir.

Kendi uygulamalarınızda bu yapıyı test etmek için Rabisu Bulut platformunda hemen deneyebilirsiniz.