Документация
Уроки Открыть IDE
На главную
Урок 15

Динамические массивы

Массив, который сам подстраивается под ваши данные

Повторение: статические массивы

Статический массив имеет фиксированное количество ячеек:

Заранее указать достаточное количество ячеек — невозможно, если размер данных неизвестен.

Проблема: если нужный размер неизвестен заранее

Что делать, если количество данных неизвестно? Создать массив на 5000 ячеек, чтобы «точно хватило»?

Это плохое решение:

  • Кому-то понадобится ещё больше — и программу придётся переписывать.
  • Кому-то хватит и 100 ячеек — но тогда 4900 ячеек будут пустовать, тратя оперативную память без пользы.

Вывод: нужен массив, у которого количество ячеек можно изменять во время выполнения программы.

Динамический массив

В Idyllium такой массив существует — он называется dyn_array (от англ. dynamic array):

Разберём:

  • dyn_array — тип «динамический массив»;
  • <int> — тип данных в ячейках;
  • nums — имя массива;
  • [11, 22, 33] — начальные ячейки (можно и без них).

В отличие от array, длина такого массива не фиксирована.

Добавление ячеек: метод add()

[11, 22, 33, 44, 55, 66]

Метод add(значение) добавляет новую ячейку в конец массива с указанным значением.

Динамические массивы с любыми типами

dyn_array работает не только с числами, но и со строками, символами и даже логическими значениями.

Было: [Верстак, Кирка, Меч] Стало: [Верстак, Кирка, Меч, Уголь]

Как видите, принцип работы одинаков для любого типа данных — просто укажите нужный тип в угловых скобках: dyn_array<string>, dyn_array<float>, dyn_array<char> или даже dyn_array<bool>.

Удаление ячейки: метод remove_at()

[11, 22, 44, 55, 66, 77, 88]

Ячейка с индексом 2 удаляется, а все последующие сдвигаются на одну позицию влево.

Текущая длина: метод length()

В массиве сейчас 5 ячеек А теперь 6 ячеек

Перебор динамического массива

Как и статический, динамический массив можно перебирать циклом — при этом число итераций определяется его текущей длиной:

81 45 33 27 90 64 333 444

Цикл адаптируется автоматически — сколько ячеек, столько и итераций.

Изменение размера: метод resize()

Метод resize(N) устанавливает новую длину массива — N ячеек:

A = [24, 91, 63, 50, 78, 0, 0, 0, 0, 0] B = [81, 45, 33, 27, 90]

Если resize() увеличивает массив — новые ячейки заполняются дефолтными значениями (для int — это 0).

Если resize() уменьшает массив — лишние ячейки безвозвратно удаляются.