Первый слайд презентации
Динамический массив Динамическим называется массив, размер которого может изменяться во время исполнения программы. Возможность изменения размера отличает динамический массив от статического, размер которого задаётся на момент компиляции программы. Если при описании статического массива не сделать size константой, то будет ошибка компиляции, т.к. память для массива должна выделиться ДО начала работы программы. Для динамического массива память будет выделяться ВО ВРЕМЯ работы программы, поэтому размер массива даже можно получить от пользователя.
Слайд 2
Задача 1. Создать динамический массив, получив его длину от пользователя. Заполнить массив случайными числами. Вывести массив. Вернуть память в кучу.
Слайд 3
Двумерный динамический массив Поскольку в двумерном массиве указатели на элементы одномерного массива будут хранить указатели на элементы одномерного массива, необходимо использовать указатели на указатели (значения rows и cols можно получить от пользователя): Утечка памяти Указатель на rows cols delete[] a; приведет к тому, что rows уничтожатся, а cols потеряются в куче.
Слайд 6
Задача 2. Создать двумерный динамический массив, получив его параметры от пользователя. Заполнить массив случайными числами. Вывести массив. Вернуть память в кучу.
Слайд 7
Копирование динамического массива просто b начнет указывать на ту же ячейку памяти что и a, изначальный массив b потеряется (утечка памяти), и при последующем изменении массива b изменится и массив a : a b Операция копирования динамического массива не равнозначна операции простого копирования значения из одной переменной в другую переменную. Массив является указателем, имя массива – указатель на нулевой элемент. Если напрямую попытаться присвоить одному массиву другой массив, то НЕ появится копии массива:
Слайд 8
Правильный алгоритм действий: Были два массива разного размера. Нужно, чтобы массив b стал именно копией массива a. Для этого нужно удалить массив b (вернуть память куче). Затем снова выделить память под b, но уже для другого кол-ва элементов (при этом память может оказаться выделенной как по тому же адресу, где был b, так и по любому другому). Поэлементно (в цикле) скопировать a в b. Результат: Решение: a b
Слайд 11
Задача 3. Написать программу, которая меняет местами два динамических массива разного размера.
Слайд 12
Изменение размера массива Все элементы массива располагаются в оперативной памяти строго последовательно. Ячейка в оперативной памяти, расположенная после последнего элемента созданного массива может быть занята и недоступна для перезаписи. Поэтому для того, чтобы увеличить массив, придется сначала создать новый массив нужного размера (выделить для него память), затем с помощью цикла скопировать в него элементы из предыдущего массива, добавить необходимые элементы и удалить изначальный массив (вернуть память куче). При необходимости удалить элемент массива действовать придется описанным выше способом, поскольку обход массива осуществляется по адресам ячеек памяти и обнуление ненужного элемента в начале / середине массива не приведет к его удалению. Если попытаться удалить последние элементы и размеру массива назначить новое значение, то произойдет утечка памяти, т.к. к последним элементам не будет доступа, а место в куче для них будет всё также зарезервировано. Добавление элемента в конец массива:
Слайд 14
Добавим в предыдущую программу еще одну функцию: Удаление последнего элемента массива: Дополним main() :
Слайд 15
Задача 4. Изменить представленную выше программу: a) размер изначального массива = 7; b) добавление и удаление элемента с индексом 0; c) добавление и удаление элемента с индексом 3.
Последний слайд презентации: Динамический массив Динамическим называется массив, размер которого может
1. Написать программу, создающую массив из 10 случайных целых чисел из отрезка [-50;50]. Вывести на экран весь массив и на отдельной строке — значение минимального элемента массива. Для обхода массива использовать указатели (нельзя обращаться к элементам массива по индексам). 2. С одномерным массивом, состоящим из n вещественных элементов, выполнить следующее: Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [ а,b ], а потом – все остальные.