В C++ обыкновенные массивы – это структуры фиксированного размера,
т. е. после создания изменить размер уже нельзя. Например, в следующем
фрагменте создается массив, содержащий n целых значений:
```
int array[n];
```
Динамическим называется массив, размер которого можно изменять в
процессе выполнения программы. В стандартной библиотеке C++ имеется
несколько динамических массивов, но полезнее всего вектор.
### Векторы
Вектор – это динамический массив, который позволяет эффективно
добавлять элементы в конце и удалять последние элементы. Например,
в следующем коде создается пустой вектор, в который затем добавляется
три элемента:
```
vector<int> v;
v.push_back(3); // [3]
v.push_back(2); // [3,2]
v.push_back(5); // [3,2,5]
```
Доступ к элементам осуществляется так же, как в обычном массиве:
```
cout << v[0] << "\n"; // 3
cout << v[1] << "\n"; // 2
cout << v[2] << "\n"; // 5
```
Еще один способ создать вектор – перечислить все его элементы:
```
vector<int> v = {2,4,2,5,1};
```
Можно также задать число элементов и их начальное значение:
```
vector<int> a(8); // размер 8, начальное значение 0
vector<int> b(8,2); // размер 8, начальное значение 2
```
Функция size возвращает число элементов вектора. В следующем коде
мы обходим вектор и печатаем его элементы:
```
for (int i = 0; i < v.size(); i++) {
cout << v[i] << "\n";
}
```
Обход вектора можно записать и короче:
```
for (auto x : v) {
cout << x << "\n";
}
```
Функция back возвращает последний элемент вектора, а функция
pop_back удаляет последний элемент:
```
vector<int> v = {2,4,2,5,1};
cout << v.back() << "\n"; // 1
v.pop_back();
cout << v.back() << "\n"; // 5
```
Векторы реализованы так, что функции push_back и pop_back в среднем
имеют сложность O(1). На практике работать с вектором почти так же
быстро, как с массивом.