Добавление дополнительной памяти к одномерному массиву, привязанному к указательной переменной

Код, от которого мы будем отталкиваться:

Создание динамических массивов в С++ происходит путём создания дополнительного массива, который заполняется значениями того массива, который предполагается расширить, после чего расширяемый массив уничтожается, а указательная переменная, используемая как массив, перенаправляется на новый сформированный массив. Это весь принцип алгоритма добавления новых ячеек памяти к массиву, если использовать new/delete. Кроме использования этого алгоритма, нужно чётко прослеживать изменения, происходящие с ячейками массива: нужен счётчик ячеек. В показанном примере в качестве счётчика выступает переменная N, которая при довыделении памяти изменяется. Чтобы изменения действовали на настоящий счётчик ячеек — в параметре функции используется ссылочный тип: int& N.
  • Динамический и динамически-создаваемый массивы — не одно и то же. Несмотря на схожие названия у этих двух сущностей есть важное отличие: к динамическому массиву в ходе работы программы можно многократно добавлять ячейки и уничтожать любые его ячейки в то время, когда динамически-создаваемый массив узнаёт количество своих ячеек в ходе работы программы один раз и этим всё ограничивается.
Немного усовершенствуем написанную программу путём добавления к массиву произвольного, указываемого нами, числа ячеек и добавлением функции обрезания ячеек в массиве:

Вы легко можете подменить функцию ввода, чтобы заполнять массив, например, вручную или случайным набором чисел. Основа, которую вы должны понять, что и в случае усечения, и в случае довыделения ячеек — мы создаём новый массив, в который переносим значения старого, а после переноса значений — старый массив обязательно уничтожается, чтобы программа не сжирала память вхолостую. К тому же, при работе с обычными функциями и указателями на массив необходимо строго прослеживать изменения, происходящие с количеством ячеек. Эта основа заложена в создание динамических массивов, т. е. массивов, число ячеек которых в ходе работы программы изменяется много раз.
Функцию memmove вы можете заменить на привычный вам цикл for, я просто не очень хотел использовать этот цикл.
Функция усечения может показаться страшноватой из-за наличия в ней всяких условий. Но эти проверки, которые в ней описаны, нужны, чтобы исключать возможное возникновение некоторых проблем: выделение памяти по отрицательному числу, копирование с выходом за границы основного массива, уничтожение большего числа ячеек, чем вообще есть ячеек в массиве. Эти ошибки легко предвидеть, поэтому лучше сразу предупредить возможный сбой программы, способный произойти из-за неправильного ввода данных.
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

2 комментария: Добавление дополнительной памяти к одномерному массиву, привязанному к указательной переменной

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/ildar-habibullin/samouchitel-java/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Демотиватор вероисповедание программист

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок