Пространства имён
Варианты
Действия

std::vector

Материал из cppreference.com
< cpp‎ | container
Определено в заголовочном файле <vector>
template<

    class T,
    class Allocator = std::allocator<T>

> class vector;
(1)
namespace pmr {

    template <class T>
    using vector = std::vector<T, std::polymorphic_allocator<T>>;

}
(2)
1) std::vector — последовательный контейнер, инкапсулирующий массивы переменного размера.
2) std::pmr::vector псевдоним шаблона, использующего polymorphic allocator
Элементы хранятся непрерывно, а значит доступны не только через итераторы, но и через смещения, добавляемые к указателям на элементы (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 - Тип элементов.
Тип T должен соответствовать требованиям CopyAssignable и CopyConstructible. (до C++11)
Требования, налагаемые на элементы, зависят от конкретных операций, производимых с контейнером. Как правило, требуется, чтобы тип элементов соответствовал требованиям MoveConstructible и MoveAssignable, но многие функции-члены налагают более строгие требования. (начиная с C++11)

[править]

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 функция-член) [править]
Уменьшает использование памяти, высвобождая неиспользуемую
(public функция-член) [править]
Модификаторы
Очищает контейнер
(public функция-член) [править]
Вставляет элементы
Оригинал:
inserts elements
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-член) [править]
(C++11)
Конструирует элементы "на месте" и вставляет их начиная с заданной позиции pos
(public функция-член) [править]
Удаляет элементы
(public функция-член) [править]
Добавляет элемент в конец
(public функция-член) [править]
Конструирует элементы "на месте" в конце контейнера
(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