Menu
Coddy logo textTech

Riepilogo - Gestore di array dinamico

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 17 di 104.

challenge icon

Sfida

Facile

Creiamo una classe DynamicArray che gestisce la propria memoria e cresce automaticamente quando necessario, proprio come funziona std::vector internamente!

Creerai due file per organizzare il codice:

  • DynamicArray.h: Definisci una classe DynamicArray che gestisce un array di interi di dimensione dinamica. La classe dovrebbe avere:
    • Campi privati: un puntatore all'array dei dati, la dimensione corrente (numero di elementi) e la capacità (spazio allocato)
    • Un costruttore che accetta una capacità iniziale, alloca l'array nell'heap e inizializza la dimensione a 0
    • Un distruttore che libera la memoria allocata e stampa "DynamicArray destroyed"
    • Un metodo push(int value) che aggiunge un elemento all'array. Se l'array è pieno, dovrebbe raddoppiare la capacità allocando un nuovo array più grande, copiando gli elementi esistenti e liberando il vecchio array
    • Un metodo get(size_t index) che restituisce l'elemento all'indice specificato
    • Un metodo getSize() che restituisce il numero corrente di elementi
    • Un metodo getCapacity() che restituisce la capacità corrente
  • main.cpp: Leggi una capacità iniziale e il numero di valori da aggiungere. Poi leggi altrettanti valori interi e inseriscili uno per uno nel tuo DynamicArray. Dopo aver aggiunto tutti i valori, stampa:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (tutti gli elementi separati da spazi)

Il formato dell'input sarà:

  • Prima riga: capacità iniziale (intero)
  • Seconda riga: numero di valori da aggiungere (intero)
  • Righe successive: un valore intero per riga

Quando ridimensioni l'array, dovrebbe raddoppiare la sua capacità. Per esempio, se inizi con una capacità pari a 2 e inserisci un terzo elemento, la capacità dovrebbe diventare 4. Questo dimostra il principio RAII. La classe acquisisce memoria nel costruttore e la rilascia nel distruttore, assicurando che non si verifichino perdite di memoria.

Includi il file header in main.cpp usando #include "DynamicArray.h".

Provalo tu

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

using namespace std;

int main() {
    // Leggi la capacità iniziale
    int initialCapacity;
    cin >> initialCapacity;

    // Leggi il numero di valori da aggiungere
    int numValues;
    cin >> numValues;

    // TODO: Crea un DynamicArray con la capacità iniziale

    // TODO: Leggi numValues interi e aggiungi ciascuno all'array

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

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

    // TODO: Stampa "Elements: <e1> <e2> ..." (tutti gli elementi separati da spazi)

    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online