📏 C++'ta Dizi Uzunluğu (Array Length) Nasıl Bulunur?
C++ dilinde bir dizinin uzunluğunu bulmak, özellikle statik diziler söz konusu olduğunda oldukça yaygın bir ihtiyaçtır.
Bu rehberde, sizeof(), begin()/end(), for-each döngüsü, STL size() ve pointer aritmetiği dahil olmak üzere 5 farklı yöntemi örneklerle öğreneceksiniz.
🎯 Bu Rehberde Ne Öğreneceksiniz?
sizeof()operatörüyle dizinin uzunluğunu nasıl hesaplayacağınızı,begin()/end()iterator farkını kullanarak uzunluk bulmayı,- for-each döngüsüyle eleman saymayı,
- STL (
std::array,std::vector) konteynerlerindesize()fonksiyonunu, - pointer aritmetiğiyle gelişmiş uzunluk bulma tekniğini,
- statik ve dinamik dizi farklarını,
- sık yapılan hataları öğreneceksiniz.
🔹 1️⃣ sizeof() Operatörü ile Dizi Uzunluğunu Bulmak (Önerilen Yöntem)
sizeof() operatörü, bir değişkenin bellekte kapladığı alanı byte cinsinden döndürür.
Toplam dizi boyutunu bir elemanın boyutuna böldüğümüzde, dizinin eleman sayısını elde ederiz.
#include <iostream>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50};
int uzunluk = sizeof(arr) / sizeof(arr[0]);
cout << "Dizinin uzunlugu: " << uzunluk;
return 0;
}
💡 Açıklama:
sizeof(arr) → dizinin tamamı sizeof(arr[0]) → tek eleman boyutu Sonuç olarak 5 döner.
⚠️ sizeof() ve Pointer Sınırlaması
int arr[] = {1, 2, 3, 4, 5};
int* ptr = arr;
int yanlis = sizeof(ptr) / sizeof(ptr[0]); // Yanlış sonuç
📘 Neden?
Çünkü sizeof(ptr) pointer’ın kendi boyutunu (örneğin 8 byte) döndürür, dizinin değil. Bu yüzden sizeof() yalnızca statik diziler üzerinde doğru sonuç verir.
🔹 2️⃣ begin() ve end() Fonksiyonları ile Uzunluk Hesaplama
C++ standart kütüphanesindeki begin() ve end() fonksiyonları dizinin başlangıç ve bitiş adreslerini döndürür. Bu iki adresin farkı dizinin uzunluğunu verir.
#include <iostream>
#include <iterator>
using namespace std;
int main() {
int arr[] = {11, 22, 33, 44};
cout << "Dizinin uzunlugu: " << end(arr) - begin(arr);
return 0;
}
💡 Açıklama:
end(arr) → dizinin sonundan sonraki adres begin(arr) → dizinin ilk adresi Fark = 4 → toplam eleman sayısı.
🔹 3️⃣ for-each Döngüsüyle Eleman Sayma
C++11 ile gelen for-each döngüsü, dizideki her elemanı kolayca gezmenizi sağlar. Elemanları sayarak uzunluğu elde edebilirsiniz.
#include <iostream>
using namespace std;
int main() {
int sayac = 0;
int arr[] = {1, 2, 3, 4, 5, 6};
for (auto i : arr) sayac++;
cout << "Dizinin uzunlugu: " << sayac;
return 0;
}
💡 Açıklama: Her döngüde sayaç artırılır, döngü bittiğinde toplam eleman sayısı elde edilir. Basit ama büyük dizilerde verimsizdir.
🔹 4️⃣ STL size() Fonksiyonu (Modern C++ Yöntemi)
STL konteynerleri (std::array, std::vector) zaten size() fonksiyonuna sahiptir. Bu yöntem okunabilir, güvenli ve modern C++ projeleri için en uygunudur.
#include <array>
#include <iostream>
using namespace std;
int main() {
array<int, 5> arr = {10, 20, 30, 40, 50};
cout << "Dizinin uzunlugu: " << arr.size();
return 0;
}
💡 Açıklama:
arr.size() doğrudan toplam eleman sayısını döndürür. std::vector için de aynı şekilde çalışır.
🔹 5️⃣ Pointer Aritmetiği ile Dizi Uzunluğu Bulmak
Dizinin başlangıç adresi (arr) ve dizinin hemen sonrasını gösteren adres (&arr + 1) arasındaki fark, dizi uzunluğunu verir.
#include <iostream>
using namespace std;
int main() {
int arr[6] = {5, 4, 3, 2, 1, 0};
int len = *(&arr + 1) - arr;
cout << "Dizinin uzunlugu: " << len;
return 0;
}
💡 Açıklama:
&arr + 1 dizinin tamamının hemen sonrasını gösterir. Bu adres farkı, eleman sayısını verir.
⚖️ Statik ve Dinamik Diziler Arasındaki Farklar
| Özellik | Statik Dizi (int arr[]) | Dinamik Dizi (Pointer / std::vector) |
|---|---|---|
| Boyut | Derleme anında sabit | Çalışma anında belirlenir |
| Bellek Yeri | Stack | Heap |
| Uzunluk Bulma | sizeof() ile bulunur | sizeof() işe yaramaz |
| STL Alternatifi | std::array | std::vector |
❓ Sıkça Sorulan Sorular (SSS)
1️⃣ Neden sizeof() dinamik dizilerde çalışmaz?
Çünkü sizeof() derleme zamanındaki boyutu döndürür. Dinamik diziler ise çalışma zamanında oluşturulduğundan sadece pointer’ın boyutunu verir.
2️⃣ Dizi uzunluğu ve boyutu aynı şey mi?
Hayır.
Uzunluk (length): Eleman sayısı
Boyut (size): Bellekte kapladığı toplam byte miktarı
3️⃣ STL std::vector uzunluğu nasıl bulunur?
std::vector<int> v = {1,2,3,4};
v.size(); → Eleman sayısını döndürür.
4️⃣ Fonksiyona geçirilen dizinin uzunluğu neden bilinmez?
Çünkü dizi fonksiyona pointer olarak iletilir, bu yüzden sizeof() sadece adresin boyutunu döndürür. Çözüm: dizinin uzunluğunu ana fonksiyonda hesaplayıp ikinci parametre olarak geçirin.
5️⃣ En güvenli yöntem hangisi?
Statik diziler için sizeof(arr)/sizeof(arr[0]), modern C++ projeleri için arr.size() en güvenilir çözümdür.
🚀 Sonuç
Bu rehberde, C++ dilinde dizinin uzunluğunu bulmanın 5 farklı yöntemini öğrendiniz. Statik diziler için sizeof() formülü hâlâ en sade ve etkili yöntemdir. Ancak modern C++’ta STL konteynerlerini (std::array, std::vector) kullanmak, kodunuzu daha güvenli ve okunabilir hale getirir.
💬 Şimdi sıra sende! Rabisu Bulut Platformu’nda kendi C++ projenizi oluştur, diziler üzerinde pratik yap ve performans farklarını test et. ⚡