Skip to main content

C++ 2D Vektörler (İki Boyutlu Vektörler) Rehberi: Dinamik Matris Yönetimi 📈

Meta Açıklaması: C++’ta 2D vektörleri (vektörlerin vektörü) kullanarak dinamik matrisler oluşturmayı, veri ekleme/silme işlemlerini ve yineleyici (iterator) ile gezinmeyi öğrenin.


🚀 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:

cpp

#include <bits/stdc++.h>
🧩 2. 2D Vektör Oluşturma ve Başlatma
🔹 a) Statik Başlatma (Değerler Biliniyorken)
Değerlerinizi önceden biliyorsanız, doğrudan başlatabilirsiniz:

cpp

#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

🔹 b-) 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.

🔹 c) 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
cpp

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. ☁️