| Векторы (vector) это последовательность контейнеров, представляющих массивы, размер которых можно изменять во время работы программы (runtime). Точно так же, как и массивы, векторы используют непрерывное хранилище в памяти для своих элементов (элементы следуют друг за другом без пропусков). Это означает, что элементы векторов могут быть доступны не только через итератор, но и с помощью смещения (использования обычных указателей), как это эффективно реализуется с массивами. Однако в отличие от массивов, размер векторов можно менять динамически, причем обслуживание хранилища осуществляется автоматически контейнером. Внутри себя векторы для хранения своих элементов используют динамически выделенный массив. В процессе роста этот массив требует своего повторного выделения. Это происходит каждый раз, когда добавляются новые элементы, при этом все элементы перемещаются в заново выделенный массив. Эта задача довольно затратная с точки зрения процессорного времени, поэтому иногда используется упреждающее выделение памяти для вектора, когда переразмещение массива его хранилища делается не каждый раз при добавлении нового элемента в контейнер. По этой причине реальный размер контейнера может быть больше, чем требуется для хранения элементов вектора. Библиотеки могут реализовывать разные стратегии для роста контейнера для обеспечения баланса между использованием памяти и повторными выделениями. Однако в любом случае повторные выделения должны происходить с логарифмически растущими интервалами размера, так чтобы вставка отдельных элементов в конец вектора можно было предоставить амортизируемую постоянную сложность вычислений в контексте затрат процессорного времени (см. push_back). Таким образом, в сравнении с массивами векторы потребляют больше памяти с целью повысить эффективность работы по обслуживанию хранилища в случаях, когда растет количество элементов. Если сравнивать с другими динамическими хранилищами последовательности - двусторонними очередями (deque) и списками (list, forward_list), векторы обеспечивают очень эффективный доступ к своим элементам (такой же эффективный, как у массивов), и относительно эффективное добавление или удаление элементов в своем конце. Для операций, которые вовлекают вставку или удаление элементов в позиции, не совпадающие с концом, векторы работают хуже других, и имеют менее целостные итераторы и ссылки, чем списки list и forward_list. [Основные свойства контейнера] Последовательность. Элементы в контейнере vector всегда имеют строго упорядоченную, линейную последовательность. К отдельным элементам можно получить доступ по номеру их позиции в последовательности (т. е. по индексу, как в массиве). Динамический массив. Позволяет осуществить доступ к любому элементу последовательности даже через арифметику указателей, и предоставляет относительно быстрое добавление/удаление элементов в конце последовательности. Проблемы выделения памяти. Контейнер использует объект выделения памяти (allocator object) для динамического обслуживания своего хранилища по мере необходимости.
 [Параметры шаблона]
 T Тип элементов. Только с теми типами, которые не выбрасывают исключение при физическом перемещении по памяти [2], гарантируется оптимизация, которая применяет перемещение данных элементов вместо их копирования (при переразмещении хранилища). Псевдоним для доступа как члену класса vector::value_type. Alloc Тип объекта allocator используется для определения модели выделения памяти для хранилища. По умолчанию используется шаблон класса allocator [3], который определяет простейший принцип выделения памяти, независимый от значения.Псевдоним для доступа как члену класса vector::allocator_type.
 [Поля] C++98 
| Поле | Определение | Примечание 
 |  
| value_type | Первый параметр шаблона (T) |  |  
| allocator_type 
 | Второй параметр шаблона (Alloc) | По умолчанию: allocator< value_type> |  
| reference 
 | allocator_type::reference | Для allocator по умолчанию: value_type& |  
| const_reference 
 | allocator_type::const_reference | Для allocator по умолчанию: const value_type& |  
| pointer 
 | allocator_type::pointer | Для allocator по умолчанию: value_type* |  
| const_pointer 
 | allocator_type::const_pointer | Для allocator по умолчанию: const value_type* |  
| iterator 
 | Итератор произвольного доступа к элементам вектора типа value_type | Может быть преобразован к const_iterator |  
| const_iterator 
 | Итератор произвольного доступа к элементам вектора типа const value_type |  |  
| reverse_iterator 
 | reverse_iterator< iterator> |  |  
| const_reverse_iterator 
 | reverse_iterator< const_iterator> |  |  
| difference_type 
 | Целочисленный тип со знаком, идентичный: iterator_traits< iterator>::difference_type | Обычно то же самое, что и ptrdiff_t |  
| size_type 
 | Целочисленный тип без знака, который может представить любое неотрицательное значение difference_type | Обычно то же самое, что и size_t |  C++11 
| Поле | Определение | Примечание 
 |  
| value_type | Первый параметр шаблона (T) |  |  
| allocator_type 
 | Второй параметр шаблона (Alloc) | По умолчанию: allocator< value_type> |  
| reference 
 | value_type& |  |  
| const_reference 
 | const value_type& |  |  
| pointer 
 | allocator_traits< allocator_type>::pointer | Для allocator по умолчанию: value_type* |  
| const_pointer 
 | allocator_traits< allocator_type>::const_pointer | Для allocator по умолчанию: const value_type* |  
| iterator 
 | Итератор произвольного доступа к элементам вектора типа value_type | Может быть преобразован к const_iterator |  
| const_iterator 
 | Итератор произвольного доступа к элементам вектора типа const value_type |  |  
| reverse_iterator 
 | reverse_iterator< iterator> |  |  
| const_reverse_iterator 
 | reverse_iterator< const_iterator> |  |  
| difference_type 
 | Целочисленный тип со знаком, идентичный: iterator_traits< iterator>::difference_type | Обычно то же самое, что и ptrdiff_t |  
| size_type 
 | Целочисленный тип без знака, который может представить любое неотрицательное значение difference_type | Обычно то же самое, что и size_t |  [Функции] 
| Функция | Описание |  
| Конструктор | Создает экземпляр шаблона vector. |  
| Деструктор | Уничтожает экземпляр шаблона vector. |  
| operator= | Присваивает содержимое. |  
| Итераторы: |  
| begin | Возвращает позицию итератора в начало. |  
| end | Переводит позицию итератора в конец. |  
| rbegin | Возвращает позицию обратного итератора к обратному началу. |  
| rend | Переводит позицию обратного итератора к обратному концу. |  
| cbegin | Возвращает позицию const-итератора в начало (только для C++11). |  
| cend | Переводит позицию const-итератора в конец (только для C++11). |  
| crbegin | Возвращает позицию обратного const-итератора к обратному началу (только для C++11). |  
| crend | Переводит позицию обратного const-итератора к обратному концу (только для C++11). |  
| Работа с емкостью хранилища: |  
| size | Возвратит размер. |  
| max_size | Возвратит максимальный размер. |  
| resize | Изменяет размер. |  
| capacity | Вернет размер выделенного хранилища. |  
| empty | Проверит vector на пустоту. |  
| reserve | Запрос на изменение емкости хранилища. |  
| shrink_to_fit | Обрезка хранилища по полезному содержимому (только для C++11). |  
| Доступ к элементам: |  
| operator[] | Доступ к произвольному элементу. |  
| at |  
| front | Доступ к первому элементу. |  
| back | Доступ к последнему элементу. |  
| data | Доступ к данным (только для C++11). |  
| Модификаторы: |  
| assign | Присвоение содержимого vector. |  
| push_back | Добавление элемента в конец. |  
| pop_back | Удаление последнего элемента. |  
| insert | Вставка элементов. |  
| erase | Стирание элементов. |  
| swap | Перестановка содержимого. |  
| clear | Очистка содержимого. |  
| emplace | Конструирование и вставка элемента. |  
| emplace_back | Конструирование и вставка элемента в конец. |  
| Allocator: |  
| get_allocator | Получение объекта для выделения памяти. |  [Перегрузки функций, не относящихся к экземпляру] 
| Функция | Описание |  
| relational-операторы | Операторы отношения для vector (функция шаблона). |  
| swap | Обмен содержимого vector-ов (функция шаблона). |  [Специализации шаблона] 
| Функция | Описание |  
| vector< bool> | Вектор значений bool (специализация шаблона класса). |  [Ссылки] 1. std::vector site:cplusplus.com.2. std::is_nothrow_move_constructible site:cplusplus.com.
 3. std::allocator site:cplusplus.com.
 |