Создание динамических массивов




Лабораторная работа 8 Динамические массивы

 

Динамическое выделение памяти необходимо для эффективного использования памяти компьютера. Например, мы написали какую-то программку, которая обрабатывает массив. При написании данной программы необходимо было объявить массив, то есть задать ему фиксированный размер (к примеру, от 0 до 100 элементов). Тогда данная программа будет не универсальной, ведь может обрабатывать массив размером не более 100 элементов. А если нам понадобятся всего 20 элементов, но в памяти выделится место под 100 элементов, ведь объявление массива было статическим, а такое использование памяти крайне не эффективно.

В С++ операцииnewиdeleteпредназначены для динамического распределения памяти компьютера.Операцияnewвыделяет память из области свободной памяти, а операцияdeleteвысвобождает выделенную память.Выделяемая память, после её использования должна высвобождаться, поэтому операцииnewиdeleteиспользуются парами. Даже если не высвобождать память явно, то она освободится ресурсами ОС по завершению работы программы. Рекомендую все-таки не забывать про операциюdelete.

Операцияnewсоздает объект заданного типа, выделяет ему память и возвращает указатель правильного типа на данный участок памяти. Если память невозможно выделить, например, в случае отсутствия свободных участков, то возвращается нулевой указатель, то есть указатель вернет значение 0. Выделение памяти возможно под любой тип данных: int, float, double, char и т. д.

Разработаем программу, в которой будет создаваться динамическая переменная.

В строке 8показан способ объявления и инициализации девяткой динамического объекта, все, чтонужно так это указать значение в круглых скобочках после типа данных. Результат работы программы

клавишу...

Создание динамических массивов

Как было сказано раньше, массивы также могут быть динамическими. Чаще всего операцииnewиdeleteприменяются для создания динамических массивов, а не для создания динамических переменных. Рассмотрим фрагмент кода создания одномерного динамического массива.

После того как динамический массив стал ненужным, нужно освободить участок памяти, который под него выделялся.

После оператора delete ставятся квадратные скобочки, которые говорят о том, что высвобождается участок памяти, отводимый под одномерный массив. Разработаем программу, в которой создадим одномерный динамический массив, заполненный случайными числами.

Созданный одномерный динамический массив заполняется случайными вещественными числами, полученными c помощью функций генерации случайных чисел, причём числа генерируются в интервале от 1 до 10, интервал задается так —rand() % 10 + 1. Чтобы получить случайные вещественные числа, выполняется операция деления, с использованием явного приведения к вещественному типу знаменателя —float((rand() % 10 + 1)). Чтобы показать только два знака после запятой используем функциюsetprecision(2), прототип данной функции находится в заголовочном файле<iomanip>. Функцияtime(0)засевает генератор случайных чисел временным значением, таким образом, получается, воспроизводить случайность возникновения чисел.

По завершению работы с массивом, он удаляется, таким образом, высвобождается память, отводимая под его хранение.

Как создавать и работать с одномерными динамическими массивами мы научились. Теперь рассмотрим фрагмент кода, в котором показано, как объявляется двумерный динамический массив.

Сначала объявляется указатель второгопорядкаfloat **ptrarray, который ссылается на массив указателейfloat* [2],где размер массива равен двум. После чего в циклеforкаждой строке массива объявленного в строке 2 выделяется память под пять элементов. В результате получается двумерный динамический массивptrarray[2][5].Рассмотрим пример высвобождения памяти отводимой под двумерный динамический массив.

Объявление и удаление двумерного динамического массива выполняется с помощью цикла, так как показано выше, необходимо понять изапомнить то, как это делается.Разработаем программу, в которой создадим двумерный динамический массив.

При выводе массива была использована функцияsetw(), если вы не забыли, то она отводит место заданного размера под выводимые данные. В нашем случае, под каждый элемент массива по четыре позиции, этопозволяет выровнять, по столбцам, числа разной

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: