Menu
Coddy logo textTech

Итоги — Менеджер динамического массива

Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 17 из 104.

challenge icon

Задание

Легко

Давайте создадим класс DynamicArray, который самостоятельно управляет своей памятью, автоматически расширяясь при необходимости — именно так работает std::vector «под капотом»!

Для организации кода вы создадите два файла:

  • DynamicArray.h: Определите класс DynamicArray, который управляет динамическим массивом целых чисел. Ваш класс должен содержать:
    • Приватные члены: указатель на массив данных, текущий размер (количество элементов) и емкость (выделенное пространство)
    • Конструктор, который принимает начальную емкость, выделяет массив в куче и инициализирует размер значением 0
    • Деструктор, который освобождает выделенную память и выводит "DynamicArray destroyed"
    • Метод push(int value), который добавляет элемент в массив. Если массив заполнен, он должен удвоить емкость, выделив новый массив большего размера, скопировав существующие элементы и освободив старый массив
    • Метод get(size_t index), который возвращает элемент по заданному индексу
    • Метод getSize(), который возвращает текущее количество элементов
    • Метод getCapacity(), который возвращает текущую емкость
  • main.cpp: Считайте начальную емкость и количество значений для добавления. Затем считайте указанное количество целых чисел и добавьте каждое из них в свой DynamicArray. После добавления всех значений выведите:
    • "Size: <size>"
    • "Capacity: <capacity>"
    • "Elements: <e1> <e2> ..." (все элементы, разделенные пробелами)

Формат входных данных:

  • Первая строка: начальная емкость (целое число)
  • Вторая строка: количество значений для добавления (целое число)
  • Последующие строки: по одному целому числу в строке

При изменении размера ваш массив должен удваивать свою емкость. Например, если вы начинаете с емкости 2 и добавляете третий элемент, емкость должна стать 4. Это демонстрирует принцип RAII — ваш класс захватывает память в конструкторе и освобождает ее в деструкторе, гарантируя отсутствие утечек памяти.

Подключите заголовочный файл в main.cpp с помощью #include "DynamicArray.h".

Попробуйте сами

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

using namespace std;

int main() {
    // Считать начальную емкость
    int initialCapacity;
    cin >> initialCapacity;

    // Считать количество добавляемых значений
    int numValues;
    cin >> numValues;

    // TODO: Создать DynamicArray с начальной емкостью

    // TODO: Считать numValues целых чисел и добавить каждое в массив

    // TODO: Вывести "Size: <size>"

    // TODO: Вывести "Capacity: <capacity>"

    // TODO: Вывести "Elements: <e1> <e2> ..." (все элементы через пробел)

    return 0;
}

Все уроки раздела Объектно-ориентированное программирование

2Управление памятью

Стек и кучаУказатели и ссылкиДинамическая память (new/delete)Умные указатели в C++RAII в C++Итоги — Менеджер динамического массива