Что такое динамический массив?
Динамический массив очень похож на обычный массив, но его размер можно изменять во время выполнения программы. Элементы DynamArray занимают непрерывный блок памяти.
После создания массива его размер не может быть изменен. Однако динамический массив отличается. Динамический массив может увеличиваться в размере даже после заполнения.
Во время создания массива ему выделяется заранее определенный объем памяти. Это не относится к динамическому массиву, поскольку он увеличивает размер своей памяти в определенном размере, когда это необходимо.
В этом руководстве по C ++ вы узнаете
- Что такое динамический массив?
- Факторы, влияющие на производительность динамических массивов
- Новое ключевое слово
- Инициализация динамически выделяемых массивов
- Изменение размера массивов
- Динамическое удаление массивов
Факторы, влияющие на производительность динамических массивов
Начальный размер массива и коэффициент его роста определяют его производительность. Обратите внимание на следующие моменты:
- Если массив имеет небольшой размер и небольшой коэффициент роста, он будет чаще перераспределять память. Это снизит производительность массива.
- Если массив имеет большой размер и большой коэффициент роста, у него будет огромный кусок неиспользуемой памяти. Из-за этого операции изменения размера могут занять больше времени. Это снизит производительность массива.
Новое ключевое слово
В C ++ мы можем создать динамический массив, используя ключевое слово new. Количество выделяемых элементов указывается в квадратных скобках. Имя типа должно предшествовать этому. Запрошенное количество предметов будет выделено.
Синтаксис:
Ключевое слово new имеет следующий синтаксис:
pointer_variable = new data_type;
Pointer_variable - это имя переменной-указателя.
Data_type должен быть допустимым типом данных C ++.
Затем ключевое слово возвращает указатель на первый элемент. После создания динамического массива мы можем удалить его с помощью ключевого слова delete.
Пример 1:
#includeusing namespace std;int main() {int x, n;cout << "Enter the number of items: << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " items" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You entered: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}return 0;}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream в нашу программу, чтобы использовать его функции.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело функции.
- Объявите две целочисленные переменные x и n.
- Выведите на консоль текст, предлагающий пользователю ввести значение переменной n.
- Прочтите ввод пользователя с клавиатуры и назначьте его переменной n.
- Объявите массив, содержащий в общей сложности n целых чисел, и назначьте его переменной-указателю * arr.
- Распечатайте сообщение, предлагающее пользователю ввести n элементов.
- Используйте цикл for, чтобы создать переменную цикла x для перебора элементов, введенных пользователем.
- Считайте элементы, введенные пользователем, и сохраните их в массиве arr.
- Конец тела цикла for.
- Напечатайте текст на консоли.
- Используйте цикл for, чтобы создать переменную цикла x для перебора элементов массива.
- Распечатайте значения, содержащиеся в массиве с именем arr на консоли.
- Конец тела цикла for.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main ().
ПРИМЕЧАНИЕ. В приведенном выше примере пользователю разрешено указывать любой размер массива во время выполнения. Это означает, что размер массива определяется во время выполнения .
Инициализация динамически выделяемых массивов
Легко инициализировать динамический массив значением 0.
Синтаксис:
int *array{ new int[length]{} };
В приведенном выше синтаксисе длина обозначает количество элементов, которые нужно добавить в массив. Поскольку нам нужно инициализировать массив до 0, это следует оставить пустым.
Мы можем инициализировать динамический массив, используя список инициализаторов. Создадим пример, демонстрирующий это.
Пример 2:
#includeusing namespace std;int main(void) {int x;int *array{ new int[5]{ 10, 7, 15, 3, 11 } };cout << "Array elements: " << endl;for (x = 0; x < 5; x++) {cout << array[x] << endl;}return 0;}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream в нашу программу, чтобы использовать его функции.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело функции.
- Объявите целочисленную переменную с именем x.
- Объявите динамический массив с именем array, используя список инициализаторов. Массив будет содержать 5 целочисленных элементов. Обратите внимание, что мы не использовали оператор «=» между длиной массива и списком инициализаторов.
- Напечатайте текст на консоли. Endl - это ключевое слово C ++, которое означает конец строки. Перемещает курсор к следующему предложению.
- Используйте цикл for для перебора элементов массива.
- Выведите на консоль содержимое массива с именем array.
- Конец тела цикла for.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main ().
Изменение размера массивов
Длина динамического массива устанавливается во время выделения.
Однако в C ++ нет встроенного механизма изменения размера массива после того, как он был выделен.
Однако вы можете решить эту проблему, динамически выделяя новый массив, копируя элементы, а затем стирая старый массив.
Примечание: этот метод подвержен ошибкам, поэтому старайтесь их избегать.
Динамическое удаление массивов
Динамический массив должен быть удален из памяти компьютера после того, как его назначение будет выполнено. Оператор удаления может помочь вам в этом. Освободившееся пространство памяти затем можно использовать для хранения другого набора данных. Однако, даже если вы не удалите динамический массив из памяти компьютера, он будет удален автоматически после завершения программы.
Примечание:
Чтобы удалить динамический массив из памяти компьютера, вы должны использовать delete [] вместо delete. [] Указывает процессору удалить несколько переменных, а не одну переменную. Использование delete вместо delete [] при работе с динамическим массивом может привести к проблемам. Примеры таких проблем включают утечки памяти, повреждение данных, сбои и т. Д.
Пример 3:
#includeusing namespace std;int main() {int x, n;cout << "How many numbers will you type?" << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " numbers" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You typed: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}cout << endl;delete [] arr;return 0;}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream в нашу программу, чтобы использовать его функции.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело функции.
- Объявите две переменные x и n целочисленного типа данных.
- Напечатайте текст на консоли. Текст попросит пользователя указать количество цифр, которые он будет вводить.
- Прочтите ввод пользователя с клавиатуры. Входное значение будет присвоено переменной n.
- Объявить указатель переменной * arr. Массив arr зарезервирует некоторую память для хранения n целых чисел.
- Распечатайте сообщение на консоли, предлагающее пользователю ввести n чисел.
- Создайте цикл for и переменную цикла x для перебора чисел, введенных пользователем.
- Считываем числа, введенные пользователем, и сохраняем их в массиве обр.
- Конец тела цикла for.
- Напечатайте текст на консоли.
- Используйте цикл for и переменную цикла x для перебора содержимого массива arr.
- Распечатайте значения массива arr на консоли.
- Конец тела цикла for.
- Выведите на консоли пустую строку.
- Освободить память массива обр.
- Программа вернет значение при успешном завершении.
- Конец тела функции main ().
Резюме:
- Обычные массивы имеют фиксированный размер. Вы не можете изменить их размер после того, как он был объявлен.
- Для этих типов массивов размер памяти определяется во время компиляции.
- Динамические массивы разные. Их размеры можно изменять во время работы.
- В динамических массивах размер определяется во время выполнения.
- Динамические массивы в C ++ объявляются с использованием ключевого слова new.
- Мы используем квадратные скобки, чтобы указать количество элементов, которые будут храниться в динамическом массиве.
- Закончив с массивом, мы можем освободить память с помощью оператора удаления.
- Используйте оператор удаления с [], чтобы освободить память для всех элементов массива.
- Удаление без [] освобождает память только для одного элемента.
- Нет встроенного механизма для изменения размеров массивов C ++.
- Чтобы инициализировать массив с помощью инициализатора списка, мы не используем оператор «=».