Динамический массив - это массив, в котором количество элементов, и соответственно выделенный на него объем памяти, может меняться как при инициализации, так и при работе с ним. Строго говоря, такой массив не реализован в языке C++. Есть некоторая его замена, обладающая рядом функций динамического массива.
Объявляют массив таким образом:
1 2 3 |
int a; a = 7; int *mas = new int[a]; |
Благодаря такой конструкции можно инициализировать массив любого размера, но изменять размер выделенной на него памяти в ходе работы невозможно. Можно только полностью освободить занимаемое массивом место. Это делается с помощью функции delete. Для нашего примера это выглядит так
1 |
delete [] mass; |
Скобки перед оператором обязательны, они указывают на то, что удаляется именно массив, а не переменная.
Динамическим можно сделать не только одномерный массив, но и двумерный и выше. Так, например, двумерный динамический массив:
1 2 3 4 5 6 7 8 9 10 |
int a = 2; int b = 3; float **ptrarray = new float* [a]; // инициализация for (int count = 0; count < a; count++) ptrarray[count] = new float [b]; for (int count = 0; count < a; count++) // освобождение памяти delete [] ptrarray[count]; delete [] ptrarray; |
Обратиться к элементу динамического массива можно также как и к элементу обычного массива:
1 2 |
a[i] = 5; ptrarray[1][2] = 4; |
Так же некоторой альтернативой полноценному динамическому массиву может являться объект vector. Он обладает функционалом обычных массивов C++, но при этом может менять размер при добавлении в него новых элементов. Например,
1 2 |
vector<int> mV; mV.push_back(5); |
добавляет в конец пустого массива элемент 5, тем самым увеличивая его размер с 0 до 1.