Menu
Coddy logo textTech

Recapitulação - Gerenciador de Array Dinâmico

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 17 de 104.

challenge icon

Desafio

Fácil

Vamos construir uma classe DynamicArray que gerencia sua própria memória, crescendo automaticamente quando necessário — exatamente como o std::vector funciona nos bastidores!

Você criará dois arquivos para organizar seu código:

  • DynamicArray.h: Defina uma classe DynamicArray que gerencia um array de inteiros com tamanho dinâmico. Sua classe deve ter:
    • Membros privados: um ponteiro para o array de dados, o tamanho atual (número de elementos) e a capacidade (espaço alocado)
    • Um construtor que recebe uma capacidade inicial, aloca o array na heap e inicializa o tamanho como 0
    • Um destruidor que libera a memória alocada e imprime "DynamicArray destroyed"
    • Um método push(int value) que adiciona um elemento ao array. Se o array estiver cheio, ele deve dobrar a capacidade alocando um novo array maior, copiando os elementos existentes e liberando o array antigo
    • Um método get(size_t index) que retorna o elemento no índice fornecido
    • Um método getSize() que retorna o número atual de elementos
    • Um método getCapacity() que retorna a capacidade atual
  • main.cpp: Leia uma capacidade inicial e uma contagem de valores a serem adicionados. Em seguida, leia essa quantidade de valores inteiros e use o push para cada um em seu DynamicArray. Após adicionar todos os valores, imprima:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (todos os elementos separados por espaços)

O formato de entrada será:

  • Primeira linha: capacidade inicial (inteiro)
  • Segunda linha: número de valores a adicionar (inteiro)
  • Linhas seguintes: um valor inteiro por linha

Ao redimensionar, seu array deve dobrar sua capacidade. Por exemplo, se você começar com capacidade 2 e adicionar um terceiro elemento, a capacidade deve se tornar 4. Isso demonstra o princípio RAII — sua classe adquire memória no construtor e a libera no destruidor, garantindo que não haja vazamentos de memória.

Inclua seu arquivo de cabeçalho no main.cpp usando #include "DynamicArray.h".

Experimente você mesmo

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

using namespace std;

int main() {
    // Ler a capacidade inicial
    int initialCapacity;
    cin >> initialCapacity;

    // Ler o número de valores a adicionar
    int numValues;
    cin >> numValues;

    // TODO: Criar um DynamicArray com a capacidade inicial

    // TODO: Ler numValues inteiros e inserir cada um no array

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

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

    // TODO: Imprimir "Elements: <e1> <e2> ..." (todos os elementos separados por espaços)

    return 0;
}

Todas as lições de Programação Orientada a Objetos