Skip to main content

C++ String Dizisi Oluşturma: 3 Modern ve Etkili Yöntem (std::string, vector, char[][])

🧩 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, C++ dilinde string dizileri (metin dizileri) oluşturmanın üç etkili yöntemini öğreneceksiniz.
Modern std::string kullanımıyla başlayacak, ardından std::vector’ün dinamik avantajlarını keşfedecek ve son olarak geleneksel char[][] yöntemini inceleyeceksiniz.
Ayrıca, bu dizilerin fonksiyonlara nasıl parametre olarak aktarılacağını da göreceksiniz.


1️⃣ Modern C++: std::string Dizisi Kullanımı

C++'ta en basit ve güvenli yöntem, std::string türünden sabit boyutlu bir dizi tanımlamaktır.
Bu yöntem, derleme zamanında sabit bir boyuta sahiptir.

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

int main() {
string hizmetler[4] = {"Web Sunucu", "Veritabani", "Yedekleme", "Guvenlik Duvari"};

cout << "Rabisu Bulut Hizmetleri:\n";
for (int i = 0; i < 4; i++)
cout << hizmetler[i] << "\n";
}

💡 Bu örnek, sabit boyutlu bir std::string dizisinin tanımlanması ve elemanlarının yazdırılmasını gösterir.


2️⃣ En Esnek Yöntem: std::vectorstd::string Kullanımı

std::vector sınıfı, dinamik olarak büyüyebilen diziler oluşturur. C++'ta metin dizileri için en modern ve önerilen yaklaşımdır.


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

int main() {
vector<string> bolgeler;

bolgeler.push_back("tr-istanbul-1");
bolgeler.push_back("eu-frankfurt-2");
bolgeler.push_back("us-nyc-3");

int boyut = bolgeler.size();

cout << "Bolge Kodlari (" << boyut << " adet):\n";
for (int i = 0; i < boyut; i++)
cout << bolgeler[i] << "\n";
}

⚙️ Bu örnek, std::vector<string> kullanarak dinamik dizilerde eleman eklemeyi gösterir.


3️⃣ Eski Stil: 2 Boyutlu char Dizisi Kullanımı

Bu yöntem, C dilinden miras kalmıştır. Hem eleman sayısı hem de her bir metnin uzunluğu sabit olmalıdır.


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

int main() {
char musteri_isimleri[5][10] = {"Ali", "Can", "Ece", "Deniz", "Furkan"};

cout << "Musteri Listesi:\n";
for (int i = 0; i < 5; i++)
cout << musteri_isimleri[i] << "\n";
}

⚠️ char[5][10], 5 metin tutar ve her metin için maksimum 10 karakterlik alan ayırır. Bu yöntem statiktir.


4️⃣ Fonksiyonlara Metin Dizisi Geçirme

C++ dizileri, fonksiyonlara referans olarak aktarılabilir. Ancak dizi bir işaretçiye dönüştüğü için, boyut bilgisi ayrıca geçirilmelidir.


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

void listele(string arr[], int boyut) {
for (int i = 0; i < boyut; i++)
cout << arr[i] << endl;
}

int main() {
string sunucular[3] = {"tr1-node01", "tr1-node02", "tr1-node03"};
int boyut = sizeof(sunucular) / sizeof(sunucular[0]);

cout << "Sunucu Numaralari:\n";
listele(sunucular, boyut);
}

🧩 Bu örnek, std::string dizisinin fonksiyona parametre olarak gönderilmesini gösterir.

YöntemBellek YönetimiBoyutAvantajDezavantaj
std::string dizi[]StatikSabitBasit ve güvenliBoyutu değişmez
std::vector<string>Dinamik (STL)EsnekOtomatik büyüme, modernHafif overhead
char dizi[][]Statik (C-stil)SabitEski sistemlerle uyumluManuel bellek yönetimi

❓ Sıkça Sorulan Sorular (SSS)

  1. Metin dizisi için std::vector kullanmak neden daha iyi?

std::vector, boyutu dinamik olarak yönetir. Bellek taşmalarını önler ve size() gibi kullanışlı metotlar sunar.

  1. char[][] dizisinin dezavantajı nedir?

Her metin için sabit uzunluk gerekir. Fazla yer ayırmak belleği boşa harcar, az ayırmaksa kesilmeye neden olur.

  1. C++ metin dizilerinde sizeof() neden hatalı sonuç verebilir?

Dizi fonksiyona geçirildiğinde işaretçiye dönüşür. sizeof bu durumda yalnızca işaretçinin boyutunu döndürür.

  1. std::vector<string> ve std::array<string, N> arasındaki fark nedir?

std::vector dinamik boyutludur; std::array ise sabit boyutludur ama STL avantajlarını paylaşır.


🏁 Sonuç

C++'ta metin dizileri oluşturmanın birden çok yöntemi vardır. Modern projelerde std::vector<std::string> kullanmak en güvenli ve esnek yaklaşımdır. Sabit boyutlu durumlarda std::string[], düşük seviyeli işlemler içinse char[][] kullanılabilir.

💡 Bu yöntemleri Rabisu Bulut platformunda kendi C++ örneğiniz üzerinde deneyerek pratiğe dökebilirsiniz.