В 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). На практике работать с вектором почти так же быстро, как с массивом.