Menu
CoddyTech

Repaso: gestor de arreglos dinámicos

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy. Lección 17 de 104.

challenge icon

Desafío

Fácil

Vamos a crear una clase DynamicArray que gestione su propia memoria y crezca automáticamente cuando sea necesario, ¡igual que funciona std::vector internamente!

Crearás dos archivos para organizar tu código:

  • DynamicArray.h: Define una clase DynamicArray que gestione una matriz de enteros de tamaño dinámico. Tu clase debe tener:
    • Miembros privados: un puntero a la matriz de datos, el tamaño actual (número de elementos) y la capacidad (espacio asignado)
    • Un constructor que reciba una capacidad inicial, asigne la matriz en el heap e inicialice el tamaño en 0
    • Un destructor que libere la memoria asignada e imprima "DynamicArray destroyed"
    • Un método push(int value) que añada un elemento a la matriz. Si la matriz está llena, debe duplicar la capacidad asignando una nueva matriz más grande, copiando los elementos existentes y liberando la matriz anterior
    • Un método get(size_t index) que devuelva el elemento en el índice indicado
    • Un método getSize() que devuelva el número actual de elementos
    • Un método getCapacity() que devuelva la capacidad actual
  • main.cpp: Lee una capacidad inicial y la cantidad de valores que se añadirán. Después, lee esa cantidad de valores enteros y añade cada uno a tu DynamicArray. Después de añadir todos los valores, imprime:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (todos los elementos separados por espacios)

El formato de entrada será:

  • Primera línea: capacidad inicial (entero)
  • Segunda línea: número de valores que se añadirán (entero)
  • Líneas siguientes: un valor entero por línea

Al cambiar el tamaño, tu matriz debe duplicar su capacidad. Por ejemplo, si empiezas con una capacidad de 2 y añades un tercer elemento, la capacidad debe pasar a ser 4. Esto demuestra el principio RAII. Tu clase adquiere memoria en el constructor y la libera en el destructor, lo que garantiza que no haya fugas de memoria.

Incluye tu archivo de encabezado en main.cpp usando #include "DynamicArray.h".

Pruébalo tú mismo

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

using namespace std;

int main() {
    // Lee la capacidad inicial
    int initialCapacity;
    cin >> initialCapacity;

    // Lee la cantidad de valores que se agregarán
    int numValues;
    cin >> numValues;

    // TODO: Crea un DynamicArray con la capacidad inicial

    // TODO: Lee numValues enteros y agrega cada uno al arreglo

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

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

    // TODO: Imprime "Elements: <e1> <e2> ..." (todos los elementos separados por espacios)

    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C++ online