Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

Вы создадите два файла, чтобы организовать свой код:

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

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

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

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

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

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

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

using namespace std;

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

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

    // TODO: Create a DynamicArray with the initial capacity

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

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

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

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

    return 0;
}

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор C++