std::vector
| Определено в заголовочном файле <vector>
|
||
| template< class T, |
(1) | |
| namespace pmr { template <class T> |
(2) | |
std::vector — последовательный контейнер, инкапсулирующий массивы переменного размера. Элементы хранятся непрерывно, а значит доступны не только через итераторы, но и через смещения, добавляемые к указателям на элементы (data() или же, для непустых массивов, — &vect[0]). Это означает, что указатель на элемент вектора может передаваться в любую функцию, ожидающую указатель на элемент массива. |
Шаблон:mark since c++03 |
Хранилище вектора обрабатывается автоматически, расширяясь и сужаясь по мере необходимости. Векторы обычно занимают больше места, чем статические массивы, поскольку некоторое количество памяти выделяется про запас на обработку будущего роста. Таким образом, память для вектора требуется выделять не при каждой вставке элемента, а только после исчерпания резервов. Общий объём выделенной памяти можно получить с помощью функции capacity(). Резервная память может быть возвращена системе через вызов shrink_to_fit().
Перераспределения обычно являются дорогостоящими операциями в плане производительности. Функция reserve() может использоваться для предварительного выделения памяти и устранения перераспределений, если заранее известно количество элементов.
Сложность (эффективность) обычных операций над векторами следующая:
- Произвольный доступ — постоянная O(1)
- Вставка и удаление элементов в конце — амортизированная постоянная O(1)
- Вставка и удаление элементов — линейная по расстоянию до конца вектора O(n)
std::vector соответствует требованиям Container, AllocatorAwareContainer, SequenceContainer, ContiguousContainer (для T отличных от bool) (начиная с C++17) и ReversibleContainer.
Содержание |
[править] Параметры шаблона
| T | - | Тип элементов.
| ||||
| Allocator | - | Аллокатор, используемый для выделения памяти под элементы. Тип должен соответствовать требованиям Allocator.
|
[править] Специализации
Стандартная библиотека содержит специализацию std::vector для типа bool, эффективно использующую память.
| Компактный динамический BitSet (шаблон класса) | |
[править] Типы-члены
| Тип-член | Определение |
value_type
|
T
|
allocator_type
|
Allocator
|
size_type
|
Беззнаковый целочисленный тип (обычно size_t) |
difference_type
|
Знаковый целочисленный тип (обычно std::ptrdiff_t) |
reference
|
Allocator::reference (до C++11)value_type& (начиная с C++11)
|
const_reference
|
Allocator::const_reference (до C++11)const value_type& (начиная с C++11)
|
pointer
|
Allocator::pointer (до C++11)std::allocator_traits<Allocator>::pointer (начиная с C++11) |
const_pointer
|
Allocator::const_pointer (до C++11) std::allocator_traits<Allocator>::const_pointer (начиная с C++11) |
iterator
|
RandomAccessIterator
|
const_iterator
|
Константный итератор с произвольным доступом |
reverse_iterator
|
std::reverse_iterator<iterator> |
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[править] Функции-члены
Создаёт vector (public функция-член) | |
Уничтожает vector (public функция-член) | |
| Задаёт значения в контейнере (public функция-член) | |
| Задаёт значения в контейнере (public функция-член) | |
| Возвращает связанный аллокатор (public функция-член) | |
Доступ к элементам | |
| Предоставляет доступ к указанному элементу с проверкой индекса (public функция-член) | |
| Предоставляет доступ к указанному элементу (public функция-член) | |
| Предоставляет доступ к первому элементу (public функция-член) | |
| Предоставляет доступ к последнему элементу (public функция-член) | |
| (C++11) |
Предоставляет прямой доступ к внутреннему содержимому (public функция-член) |
Итераторы | |
| Возвращает итератор на первый элемент (public функция-член) | |
| Возвращает итератор на элемент, следующий за последним (public функция-член) | |
| Возвращает обратный итератор на первый элемент (public функция-член) | |
| Возвращает обратный итератор на элемент, следующий за последним (public функция-член) | |
Вместимость | |
| Проверяет отсутствие элементов в контейнере (public функция-член) | |
| Возвращает количество элементов в контейнере (public функция-член) | |
| Возвращает максимально допустимое количество элементов в контейнере (public функция-член) | |
| Зарезервировать память. (public функция-член) | |
| Возвращает количество элементов, которые могут одновременно храниться в выделенной области памяти (public функция-член) | |
| (C++11) |
Уменьшает использование памяти, высвобождая неиспользуемую (public функция-член) |
Модификаторы | |
| Очищает контейнер (public функция-член) | |
| Вставляет элементы Оригинал: inserts elements Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) | |
| (C++11) |
Конструирует элементы "на месте" и вставляет их начиная с заданной позиции pos (public функция-член) |
| Удаляет элементы (public функция-член) | |
| Добавляет элемент в конец (public функция-член) | |
| (C++11) |
Конструирует элементы "на месте" в конце контейнера (public функция-член) |
| Удаляет последний элемент (public функция-член) | |
| Изменяет количество хранимых элементов (public функция-член) | |
| Обменивает содержимое (public функция-член) | |
[править] Функции-не члены
| Лексикографически сравнивает значения в vector (шаблон функции) | |
| Специализированный std::swap алгоритм (шаблон функции) | |
[править] Пример
#include <iostream> #include <vector> int main ( ) { // Создание вектора, содержащего целые числа std::vector<int> v = {7, 5, 16, 8}; // Добавление ещё двух целых чисел в вектор v.push_back(25); v.push_back(13); // Проход по вектору с выводом значений for ( int n : v ) { std::cout << n << '\n'; } }
Вывод:
7 5 16 8 25 13