Dinamik Dizi nedir?
Dinamik bir dizi, normal bir diziye oldukça benzer, ancak boyutu program çalışma süresi sırasında değiştirilebilir. DynamArray öğeleri bitişik bir bellek bloğunu kaplar.
Bir dizi oluşturulduktan sonra boyutu değiştirilemez. Bununla birlikte, dinamik bir dizi farklıdır. Dinamik bir dizi, doldurulduktan sonra bile boyutunu genişletebilir.
Bir dizinin oluşturulması sırasında, önceden belirlenmiş miktarda bellek tahsis edilir. Dinamik bir dizide bu durum, bir ihtiyaç olduğunda bellek boyutunu belirli bir faktör kadar büyüttüğü için geçerli değildir.
Bu C ++ eğitiminde öğreneceksiniz
- Dinamik Dizi nedir?
- Dinamik Dizilerin performansını etkileyen faktörler
- Yeni Anahtar Kelime
- Dinamik olarak ayrılmış dizileri başlatma
- Dizileri Yeniden Boyutlandırma
- Dizileri Dinamik Olarak Silme
Dinamik Dizilerin performansını etkileyen faktörler
Dizinin başlangıç boyutu ve büyüme faktörü performansını belirler. Aşağıdaki noktalara dikkat edin:
- Bir dizi küçük bir boyuta ve küçük bir büyüme faktörüne sahipse, belleği daha sık yeniden tahsis etmeye devam edecektir. Bu, dizinin performansını düşürecektir.
- Bir dizi büyük bir boyuta ve büyük bir büyüme faktörüne sahipse, çok büyük miktarda kullanılmayan belleğe sahip olacaktır. Bu nedenle, yeniden boyutlandırma işlemleri daha uzun sürebilir. Bu, dizinin performansını düşürecektir.
Yeni Anahtar Kelime
C ++ 'da new anahtar sözcüğünü kullanarak dinamik bir dizi oluşturabiliriz. Tahsis edilecek öğe sayısı, bir çift köşeli parantez içinde belirtilir. Tür adı bundan önce gelmelidir. İstenen sayıda ürün tahsis edilecektir.
Sözdizimi:
Yeni anahtar kelime aşağıdaki sözdizimini alır:
pointer_variable = new data_type;
Pointer_variable, işaretçi değişkeninin adıdır.
Veri_türü, geçerli bir C ++ veri türü olmalıdır.
Anahtar kelime daha sonra ilk öğeye bir işaretçi döndürür. Dinamik diziyi oluşturduktan sonra delete anahtar sözcüğünü kullanarak silebiliriz.
Örnek 1:
#includeusing namespace std;int main() {int x, n;cout << "Enter the number of items: << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " items" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You entered: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}return 0;}
Çıktı:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını programımıza dahil edin.
- Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
- Main () işlevini çağırın. Program mantığı, işlevin gövdesine eklenmelidir.
- İki tamsayı değişkeni x ve n bildirin.
- Konsolda, kullanıcıdan n değişkeninin değerini girmesini isteyen bir metin yazdırın.
- Klavyeden kullanıcı girişini okuyun ve bunu n değişkenine atayın.
- Toplam n tamsayı tutacak bir dizi bildirin ve bunu * arr gösterici değişkenine atayın.
- Kullanıcıdan n adet öğe girmesini isteyen bir mesaj yazdırın.
- Kullanıcı tarafından girilen öğeleri yinelemek için bir döngü değişkeni x oluşturmak için bir for döngüsü kullanın.
- Kullanıcı tarafından girilen öğeleri okuyun ve bunları dizi dizisine kaydedin.
- For döngüsü gövdesinin sonu.
- Konsolda biraz metin yazdırın.
- Dizinin öğeleri üzerinde yineleme yapmak için bir döngü değişkeni x oluşturmak için bir for döngüsü kullanın.
- Konsolda arr adlı dizide bulunan değerleri yazdırın.
- For döngüsü gövdesinin sonu.
- Program başarılı bir şekilde tamamlandığında değer döndürmelidir.
- Main () işlevinin gövdesinin sonu.
NOT: Yukarıdaki örnekte, kullanıcının çalışma süresi boyunca dizi için herhangi bir boyut belirtmesine izin verilir. Bu, dizinin boyutunun çalışma süresi sırasında belirlendiği anlamına gelir .
Dinamik olarak ayrılmış dizileri başlatma
Dinamik bir diziyi 0 olarak başlatmak kolaydır.
Sözdizimi:
int *array{ new int[length]{} };
Yukarıdaki sözdiziminde uzunluk, diziye eklenecek elemanların sayısını belirtir. Diziyi 0 olarak başlatmamız gerektiğinden, bu boş bırakılmalıdır.
Bir başlatıcı listesi kullanarak dinamik bir dizi başlatabiliriz. Bunu gösteren bir örnek oluşturalım.
Örnek 2:
#includeusing namespace std;int main(void) {int x;int *array{ new int[5]{ 10, 7, 15, 3, 11 } };cout << "Array elements: " << endl;for (x = 0; x < 5; x++) {cout << array[x] << endl;}return 0;}
Çıktı:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını programımıza dahil edin.
- Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
- Main () işlevini çağırın. Program mantığı, işlevin gövdesine eklenmelidir.
- X adlı bir tamsayı değişkeni bildirin.
- Bir başlatıcı listesi kullanarak dizi adlı dinamik bir dizi bildirin. Dizi 5 tamsayı eleman tutacaktır. Dizi uzunluğu ile başlatıcı listesi arasında operatörünü kullanmadığımıza dikkat edin.
- Konsolda biraz metin yazdırın. Endl, bitiş çizgisi anlamına gelen bir C ++ anahtar kelimesidir. İmleci bir sonraki cümleye taşır.
- Dizi öğelerini yinelemek için bir for döngüsü kullanın.
- Konsolda dizi adlı dizinin içeriğini yazdırın.
- For döngüsü gövdesinin sonu.
- Program başarılı bir şekilde tamamlandığında değer döndürmelidir.
- Main () işlevinin gövdesinin sonu.
Dizileri Yeniden Boyutlandırma
Dinamik bir dizinin uzunluğu, tahsis süresi sırasında belirlenir.
Bununla birlikte, C ++, tahsis edildikten sonra bir diziyi yeniden boyutlandırmak için yerleşik bir mekanizmaya sahip değildir.
Bununla birlikte, dinamik olarak yeni bir dizi atayarak, öğelerin üzerine kopyalayıp ardından eski diziyi silerek bu zorluğun üstesinden gelebilirsiniz.
Not: Bu tekniğin hatalara yatkın olduğunu, dolayısıyla bundan kaçınmaya çalışın.
Dizileri Dinamik Olarak Silme
Dinamik bir dizi, amacı yerine getirildikten sonra bilgisayar belleğinden silinmelidir. Silme ifadesi bunu başarmanıza yardımcı olabilir. Serbest bırakılan hafıza alanı daha sonra başka bir veri setini tutmak için kullanılabilir. Bununla birlikte, dinamik diziyi bilgisayar belleğinden silmeseniz bile, program sona erdiğinde otomatik olarak silinecektir.
Not:
Dinamik bir diziyi bilgisayar belleğinden silmek için, silmek yerine delete [] kullanmalısınız. [], CPU'ya bir değişken yerine birden çok değişkeni silmesi talimatını verir. Dinamik bir diziyle uğraşırken delete [] yerine delete öğesinin kullanılması sorunlara neden olabilir. Bu tür sorunlara örnek olarak bellek sızıntıları, veri bozulması, çökmeler vb. Verilebilir.
Örnek 3:
#includeusing namespace std;int main() {int x, n;cout << "How many numbers will you type?" << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " numbers" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You typed: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}cout << endl;delete [] arr;return 0;}
Çıktı:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için programımıza iostream başlık dosyasını dahil edin.
- Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
- Main () işlevini çağırın. Program mantığı, işlevin gövdesine eklenmelidir.
- Tamsayı veri türünden iki değişken x ve n bildirin.
- Konsolda biraz metin yazdırın. Metin, kullanıcıdan gireceği sayıların sayısını belirtmesini isteyecektir.
- Klavyeden kullanıcı girişini okuyun. Giriş değeri, değişken n'ye atanacaktır.
- * Arr gösterici değişkeni bildirin. Dizi dizi, toplam n tamsayı depolamak için biraz bellek ayırır.
- Konsolda, kullanıcıdan n sayı girmesini isteyen bir mesaj yazdırın.
- Kullanıcı tarafından girilen sayıları yinelemek için bir for döngüsü ve döngü değişkeni x oluşturun.
- Kullanıcı tarafından girilen sayıları okuyun ve bunları dizi dizisine kaydedin.
- For döngüsü gövdesinin sonu.
- Konsolda biraz metin yazdırın.
- Dizi dizi içeriğini yinelemek için bir for döngüsü ve döngü değişkeni x kullanın.
- Konsolda dizi dizi değerlerini yazdırın.
- For döngüsü gövdesinin sonu.
- Konsolda boş bir satır yazdırın.
- Dizi dizisinin belleğini boşaltın.
- Program başarıyla tamamlandığında değer döndürür.
- Main () işlevinin gövdesinin sonu.
Özet:
- Normal dizilerin sabit bir boyutu vardır. Beyan ettikten sonra boyutlarını değiştiremezsiniz.
- Bu tür dizilerle, bellek boyutu derleme sırasında belirlenir.
- Dinamik diziler farklıdır. Çalışma sırasında boyutları değiştirilebilir.
- Dinamik dizilerde, boyut çalışma sırasında belirlenir.
- C ++ 'daki dinamik diziler new anahtar sözcüğü kullanılarak bildirilir.
- Dinamik dizide saklanacak öğelerin sayısını belirtmek için köşeli parantezler kullanıyoruz.
- Dizi ile işimiz bittiğinde, silme operatörünü kullanarak hafızayı boşaltabiliriz.
- Tüm dizi öğelerinin belleğini boşaltmak için [] ile silme işlecini kullanın.
- [] Olmadan silme, yalnızca tek bir öğenin belleğini boşaltır.
- C ++ dizilerini yeniden boyutlandırmak için yerleşik bir mekanizma yoktur.
- Liste başlatıcı kullanarak bir diziyi başlatmak için operatörünü kullanmayız.