Menu
Coddy logo textTech

Özet - Dinamik Dizi Yöneticisi

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 17 / 104.

challenge icon

Görev

Kolay

Tıpkı std::vector'ın arka planda çalıştığı gibi, kendi belleğini yöneten ve gerektiğinde otomatik olarak büyüyen bir DynamicArray sınıfı oluşturalım!

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • DynamicArray.h: Dinamik boyutlu bir tam sayı dizisini yöneten bir DynamicArray sınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:
    • Özel (private) üyeler: veri dizisine bir işaretçi (pointer), mevcut boyut (eleman sayısı) ve kapasite (ayrılan alan)
    • Başlangıç kapasitesini alan, diziyi yığında (heap) tahsis eden ve boyutu 0 olarak başlatan bir kurucu (constructor)
    • Tahsis edilen belleği serbest bırakan ve "DynamicArray destroyed" yazdıran bir yıkıcı (destructor)
    • Diziye bir eleman ekleyen bir push(int value) metodu. Eğer dizi doluysa, yeni ve daha büyük bir dizi tahsis ederek, mevcut elemanları kopyalayarak ve eski diziyi serbest bırakarak kapasiteyi iki katına çıkarmalıdır
    • Belirtilen indeksteki elemanı döndüren bir get(size_t index) metodu
    • Mevcut eleman sayısını döndüren bir getSize() metodu
    • Mevcut kapasiteyi döndüren bir getCapacity() metodu
  • main.cpp: Bir başlangıç kapasitesi ve eklenecek değerlerin sayısını okuyun. Ardından bu kadar tam sayı değerini okuyun ve her birini DynamicArray'inize push edin. Tüm değerleri ekledikten sonra şunları yazdırın:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (tüm elemanlar boşluklarla ayrılmış şekilde)

Giriş formatı şu şekilde olacaktır:

  • İlk satır: başlangıç kapasitesi (tam sayı)
  • İkinci satır: eklenecek değerlerin sayısı (tam sayı)
  • Sonraki satırlar: her satırda bir tam sayı değeri

Yeniden boyutlandırma sırasında diziniz kapasitesini iki katına çıkarmalıdır. Örneğin, 2 kapasite ile başlar ve üçüncü bir eleman eklerseniz, kapasite 4 olmalıdır. Bu, RAII prensibini gösterir — sınıfınız belleği kurucuda alır ve yıkıcıda serbest bırakarak bellek sızıntısı olmamasını sağlar.

Başlık dosyanızı main.cpp içinde #include "DynamicArray.h" kullanarak dahil edin.

Kendin dene

#include <iostream>
#include "DynamicArray.h"

using namespace std;

int main() {
    // Başlangıç kapasitesini oku
    int initialCapacity;
    cin >> initialCapacity;

    // Eklenecek değer sayısını oku
    int numValues;
    cin >> numValues;

    // TODO: Başlangıç kapasitesi ile bir DynamicArray oluştur

    // TODO: numValues kadar tam sayı oku ve her birini diziye ekle (push)

    // TODO: "Size: <size>" yazdır

    // TODO: "Capacity: <capacity>" yazdır

    // TODO: "Elements: <e1> <e2> ..." yazdır (tüm elemanlar aralarında boşluk bırakılarak)

    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler