Массивы, о которых шла речь до сих пор, были статические. К их недостатка можно отнести:
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)
