C++ Dizilerde Uzunluk Bulma: 5 Farklı Yöntem ve Kod Örnekleri 📏
🔍 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, C++ dizilerinin uzunluğunu (eleman sayısını) bulmanın en pratik 5 yöntemini adım adım öğreneceksiniz.
Hem klasik sizeof() hem de modern STL (Standard Template Library) yöntemlerini görecek, hangi yöntemin hangi durumda kullanılacağını anlayacaksınız.
🧠 1. Her Elemanı Sayarak Uzunluk Bulma
En temel yöntem, dizi boyunca gezinip her elemanı saymaktır.
Bu işlem için range-based for döngüsü (for-each) kullanmak kodu sade ve güvenli hale getirir.
#include <iostream>
using namespace std;
int main() {
int c = 0;
int arr[] = {1, 2, 3, 4, 5, 6};
for (auto i : arr) { // Her elemanı sayıyoruz
c++;
}
cout << "Dizinin uzunluğu: " << c << endl;
return 0;
}
🧩 Açıklama:
Döngü her çalıştığında sayaç artar ve sonunda toplam eleman sayısı bulunur.
🧮 2. begin() ve end() Fonksiyonlarını Kullanmak
C++ STL’deki begin() ve end() fonksiyonları, dizinin başlangıç ve bitiş adreslerini döndürür.
Bu iki adresin farkı dizi uzunluğunu verir.
#include <iostream>
#include <array>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40};
cout << "Dizi uzunluğu: " << end(arr) - begin(arr);
return 0;
}
🧩 Açıklama:
end(arr) – begin(arr) işlemi, dizideki toplam eleman sayısını verir.
⚙️ 3. sizeof() Operatörü ile Dizi Uzunluğu Bulma
sizeof() operatörü, bellekteki değişkenin veya dizinin bayt cinsinden boyutunu verir.
Bu değeri her bir elemanın boyutuna bölerseniz eleman sayısını bulabilirsiniz.
#include <iostream>
using namespace std;
int main() {
int arr[] = {5, 10, 15, 20};
int len = sizeof(arr) / sizeof(arr[0]);
cout << "Dizinin uzunluğu: " << len;
return 0;
}
🧩 Açıklama:
sizeof(arr) dizinin toplam baytını, sizeof(arr[0]) tek elemanın baytını verir.
⚠️ sizeof() Operatörünün Sınırlaması
int arr[] = {1, 2, 3, 4, 5};
int* ptr = arr;
int size = sizeof(ptr) / sizeof(ptr[0]); // Yanlış sonuç
🧩 Sorun:
sizeof(ptr) yalnızca işaretçinin boyutunu döndürür (örneğin 8 byte), dizinin değil. Bu yüzden sizeof() sadece statik diziler üzerinde kullanılmalıdır.
📦 4. STL size() Fonksiyonu (Modern C++ Yöntemi)
Modern C++ (C++11 ve sonrası) ile gelen std::array ve std::vector sınıfları, dahili size() metoduna sahiptir.
#include <array>
#include <iostream>
using namespace std;
int main() {
array<int, 5> arr = {1, 2, 3, 4, 5};
cout << "Dizi uzunluğu: " << arr.size();
return 0;
}
🧩 Açıklama:
arr.size() metodu dizideki eleman sayısını otomatik döndürür.
🧷 5. Pointer (İşaretçi) ile Dizi Uzunluğu Hesaplama
C++’ta diziler, bellekte bitişik alanlarda saklanır. İşaretçilerle bu adres farkını alarak dizinin uzunluğu bulunabilir.
#include <iostream>
using namespace std;
int main() {
int arr[6] = {5, 4, 3, 2, 1, 0};
int len = *(&arr + 1) - arr;
cout << "Dizinin uzunluğu: " << len;
return 0;
}
🧩 Açıklama:
&arr + 1 ifadesi, dizinin sonundan bir sonraki adresi gösterir. Bu adres ile arr arasındaki fark, eleman sayısını verir.
⚖️ Statik ve Dinamik Dizilerin Farkı
| Tür | Tanım | Boyut Değiştirilebilir mi? | Bellek Konumu |
|---|---|---|---|
| Statik Dizi | Derleme anında oluşturulur. | ❌ Hayır | Stack |
Dinamik Dizi (new[]) | Çalışma anında oluşturulur. | ✅ Evet | Heap |
// Statik
int statikArr[5];
// Dinamik
int* dinamikArr = new int[5];
🚀 Modern Alternatif: STL Konteynerleri C++’ta std::array ve std::vector, dizilerin modern, güvenli alternatifleridir.
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
cout << "Vector uzunluğu: " << vec.size();
return 0;
}
🧩 Avantaj:
std::vector, dinamik olarak büyür veya küçülür. Elle bellek yönetimi yapmanız gerekmez.
⚙️ Performans Tablosu
| Yöntem | Bellek Yönetimi | Performans | Güvenlik |
|---|---|---|---|
| Statik Dizi | Derleme Zamanı | Yüksek | Orta |
Dinamik Dizi (new[]) | Manuel | Orta | Düşük |
std::vector | Otomatik | Yüksek | Yüksek |
| 💡 Öneri: Üretim ortamlarında daima std::vector veya std::array tercih edin. |
❓ Sıkça Sorulan Sorular (SSS)
- sizeof() neden dinamik dizilerde çalışmaz?
Çünkü sizeof() sadece işaretçinin boyutunu döndürür, heap’teki dizinin değil.
- array length ile array size aynı mı?
Hayır. “Length” eleman sayısını, “Size” ise bellekteki toplam bayt boyutunu ifade eder.
- Dizi uzunluğu bir fonksiyona nasıl aktarılır?
Dizi, fonksiyona pointer olarak geçtiği için uzunluğu manuel parametre olarak gönderilmelidir.
- Modern C++’ta en güvenli yöntem hangisidir?
Kesinlikle std::vector veya std::array kullanmak.
🧩 Sonuç
Bu rehberde C++ dizilerinin uzunluğunu bulmanın 5 farklı yöntemini gördük. En pratik ve modern çözüm, STL konteynerlerinin size() metodudur. Ancak statik dizilerle çalışırken sizeof(arr)/sizeof(arr[0]) hâlâ hızlı ve geçerli bir yöntemdir.
💻 Kodlarınızı hemen denemek isterseniz, Rabisu Bulut platformunda kendi C++ ortamınızı oluşturabilir ve bu örnekleri çalıştırabilirsiniz.