Menu
Coddy logo textTech

Rückblick – Dynamischer Array-Manager

Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 17 von 104.

challenge icon

Aufgabe

Einfach

Erstellen wir eine DynamicArray-Klasse, die ihren eigenen Speicher verwaltet und bei Bedarf automatisch wächst – genau wie std::vector im Hintergrund funktioniert!

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • DynamicArray.h: Definiere eine DynamicArray-Klasse, die ein dynamisch großes Array von Ganzzahlen verwaltet. Deine Klasse sollte Folgendes enthalten:
    • Private Member: einen Zeiger auf das Datenarray, die aktuelle Größe (Anzahl der Elemente) und die Kapazität (zugewiesener Speicherplatz)
    • Einen Konstruktor, der eine anfängliche Kapazität entgegennimmt, das Array auf dem Heap reserviert und die Größe auf 0 initialisiert
    • Einen Destruktor, der den reservierten Speicher freigibt und "DynamicArray destroyed" ausgibt
    • Eine push(int value)-Methode, die ein Element zum Array hinzufügt. Wenn das Array voll ist, sollte sie die Kapazität verdoppeln, indem sie ein neues, größeres Array reserviert, die vorhandenen Elemente kopiert und das alte Array freigibt
    • Eine get(size_t index)-Methode, die das Element am angegebenen Index zurückgibt
    • Eine getSize()-Methode, die die aktuelle Anzahl der Elemente zurückgibt
    • Eine getCapacity()-Methode, die die aktuelle Kapazität zurückgibt
  • main.cpp: Lies eine anfängliche Kapazität und eine Anzahl hinzuzufügender Werte ein. Lies anschließend diese Anzahl an Ganzzahlen ein und füge jede davon in dein DynamicArray ein. Gib nach dem Hinzufügen aller Werte Folgendes aus:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (alle Elemente durch Leerzeichen getrennt)

Das Eingabeformat lautet:

  • Erste Zeile: anfängliche Kapazität (Ganzzahl)
  • Zweite Zeile: Anzahl der hinzuzufügenden Werte (Ganzzahl)
  • Folgende Zeilen: jeweils ein Ganzzahlwert pro Zeile

Beim Ändern der Größe sollte dein Array seine Kapazität verdoppeln. Wenn du beispielsweise mit der Kapazität 2 startest und ein drittes Element hinzufügst, sollte die Kapazität 4 betragen. Dies demonstriert das RAII-Prinzip. Deine Klasse reserviert Speicher im Konstruktor und gibt ihn im Destruktor frei, wodurch Speicherlecks verhindert werden.

Binde deine Header-Datei in main.cpp mit #include "DynamicArray.h" ein.

Probier es selbst

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

using namespace std;

int main() {
    // Initiale Kapazität einlesen
    int initialCapacity;
    cin >> initialCapacity;

    // Anzahl der hinzuzufügenden Werte einlesen
    int numValues;
    cin >> numValues;

    // TODO: Create a DynamicArray with the initial capacity

    // TODO: numValues Ganzzahlen einlesen und jede in das Array pushen

    // TODO: "Size: <size>" ausgeben

    // TODO: "Capacity: <capacity>" ausgeben

    // TODO: "Elements: <e1> <e2> ..." ausgeben (alle Elemente durch Leerzeichen getrennt)

    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C++-Compiler