Массивы, о которых шла речь до сих пор, были статические. К их недостатка можно отнести: 1. Размер массива должен быть задан константой, определенной заранее 2. Статические массивы нельзя удалить из памяти ## Одномерные динамические массивы Одномерный статический массив определяется через указатель на соответствующий тип. Количество элементов массива может задаваться через переменную. ```cpp тип* имя = new тип[количество элементов]; ``` Пример: ```cpp int* a = new int[n]; ``` Остальная работа с одномерным динамическим массивом производится абсолютно аналогично статическим. #### Ввод элементов массива ```cpp srand(time(0)); int n; cin >> n; int* a = new int[n]; for (int i = 0; i < n; i++) a[i] = rand() % 100; ``` #### Вывод элементов массива ```cpp for (int i = 0; i < n; i++) cout << a[i] << " "; cout << endl; ``` #### Удаление одномерного массива ```cpp delete[] имя; ``` Пример: ```cpp delete[] a; ``` ## Двумерные динамические массивы Для создания двумерного динамического массива используется двойной указатель: ```cpp тип** имя; ``` Это переменная, которая содержит в себе адрес динамической переменной, также являющейся указателем. Создание двумерного динамического массива: 1. Создается одномерный массив динамических указателей: ```cpp int** a = new int*[n1]; ``` 2. По циклу для каждого элемента указателей массива `a` создается одномерный динамический массив соответствующего типа: ```cpp for (int i = 0; i < n1; i++) a[i] = new int[n2]; ``` ![Создание динамического массива](../Pictures/06_01.%20Создание%20динамического%20массива.png) #### Ввод элементов массива ```cpp srand(time(0)); int n1, n2; cin >> n1 >> n2; int** a = new int*[n1]; for (int i = 0; i < n1; i++) { a[i] = new int[n2]; for (int j = 0; j < n2; j++) a[i] = rand() % 100; } ``` #### Вывод элементов массива ```cpp for (int i = 0; i < n1; i++) { for (int j = 0; j < n2; j++) { cout.width(4); cout << a[i][j]; } cout << endl; } ``` #### Удаление двумерного массива Стирание двумерного массива из динамической памяти происходит путем, обратным созданию. Сначала по циклу уничтожаются все одномерные динамические массивы заданного типа, и лишь затем массив указателей. ```cpp for (int i = 0; i < n1; i++) delete[] a[i]; delete[] a; ``` ![Удаление динамического массива](../Pictures/06_02.%20Удаление%20динамического%20массива.png)