Встроенные динамические массивы в C++ представляют собой массивы, размер которых может изменяться во время выполнения программы. Они обеспечивают гибкость по сравнению с статическими массивами, размер которых должен быть известен и фиксирован во время компиляции. В C++ для работы с динамическими массивами используются операторы new
и delete
.
Выделение и освобождение памяти для динамических массивов
Выделение памяти для динамического массива
Для выделения памяти для динамического массива используется оператор new
, который возвращает указатель на первый элемент массива:
int* arr = new int[10]; // выделение памяти для массива из 10 целых чисел
Освобождение памяти для динамического массива
Для освобождения памяти, выделенной для динамического массива, используется оператор delete[]
:
delete[] arr; // освобождение памяти для массива из 10 целых чисел
Перераспределение памяти
При работе с динамическими массивами может возникнуть необходимость изменить размер массива. Встроенные средства C++ не предоставляют прямого способа изменения размера массива, поэтому это достигается созданием нового массива, копированием элементов из старого массива и освобождением памяти старого массива:
#include <iostream>
int main() {
int size = 5;
int* arr = new int[size]; // выделение памяти для первоначального массива
// Заполнение массива
for (int i = 0; i < size; ++i) {
arr[i] = i * 10;
}
// Изменение размера массива
int newSize = 10;
int* newArr = new int[newSize];
// Копирование элементов в новый массив
for (int i = 0; i < size; ++i) {
newArr[i] = arr[i];
}
// Освобождение памяти старого массива
delete[] arr;
arr = newArr; // теперь arr указывает на новый массив
// Заполнение оставшихся элементов нового массива
for (int i = size; i < newSize; ++i) {
arr[i] = i * 10;
}
// Вывод нового массива
for (int i = 0; i < newSize; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
// Освобождение памяти
delete[] arr;
return 0;
}
Доп: Использование std::vector
вместо встроенных динамических массивов
Для упрощения работы с динамическими массивами и избежания ошибок управления памятью в C++ рекомендуется использовать контейнер std::vector
из стандартной библиотеки (STL). std::vector
автоматически управляет памятью и предоставляет удобные методы для работы с динамическими массивами.
Пример использования std::vector
:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec; // создание вектора
// Добавление элементов
for (int i = 0; i < 5; ++i) {
vec.push_back(i * 10);
}
// Вывод элементов
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}