Ö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.
Görev
KolayTı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 birDynamicArraysı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
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic Konteyner