Skip to main content

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ürTanımBoyut Değiştirilebilir mi?Bellek Konumu
Statik DiziDerleme anında oluşturulur.❌ HayırStack
Dinamik Dizi (new[])Çalışma anında oluşturulur.✅ EvetHeap

// 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öntemBellek YönetimiPerformansGüvenlik
Statik DiziDerleme ZamanıYüksekOrta
Dinamik Dizi (new[])ManuelOrtaDüşük
std::vectorOtomatikYüksekYüksek
💡 Öneri: Üretim ortamlarında daima std::vector veya std::array tercih edin.

❓ Sıkça Sorulan Sorular (SSS)

  1. sizeof() neden dinamik dizilerde çalışmaz?

Çünkü sizeof() sadece işaretçinin boyutunu döndürür, heap’teki dizinin değil.

  1. array length ile array size aynı mı?

Hayır. “Length” eleman sayısını, “Size” ise bellekteki toplam bayt boyutunu ifade eder.

  1. 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.

  1. 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.