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öntem | Bellek Yönetimi | Boyut | Avantaj | Dezavantaj |
|---|---|---|---|---|
std::string dizi[] | Statik | Sabit | Basit ve güvenli | Boyutu değişmez |
std::vector<string> | Dinamik (STL) | Esnek | Otomatik büyüme, modern | Hafif overhead |
char dizi[][] | Statik (C-stil) | Sabit | Eski sistemlerle uyumlu | Manuel bellek yönetimi |
❓ Sıkça Sorulan Sorular (SSS)
- Metin dizisi için
std::vectorkullanmak neden daha iyi?
std::vector, boyutu dinamik olarak yönetir. Bellek taşmalarını önler ve size() gibi kullanışlı metotlar sunar.
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.
- 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.
std::vector<string>vestd::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.