vector 是一种常用的容器类,在 C++ 当中普遍用作变长数组。

定义

template <class T,
          class Allocator = std::allocator<T>> 
class vector  // In namespace std

成员类型

value_type

using value_type = _Ty;

元素类型。

allocator_type

using allocator_type = _Alloc;

内存分配器类型。

pointer

using pointer = typename _Alty_traits::pointer;

指针类型。

const_pointer

using const_pointer = typename _Alty_traits::const_pointer;

常量指针类型。

reference

using reference = _Ty&;

引用类型。

const_reference

using const_reference = const _Ty&;

常量引用类型。

size_type

using size_type = typename _Alty_traits::size_type;

长度类型。

difference_type

using difference_type = typename _Alty_traits::difference_type;

差异类型。

iterator

using iterator = _Vector_iterator<_Scary_val>;

迭代器类型。

const_iterator

using const_iterator = _Vector_const_iterator<_Scary_val>;

常量迭代器类型。

reverse_iterator

using reverse_iterator = _STD reverse_iterator<iterator>;

反向迭代器类型。

const_reverse_iterator

using const_reverse_iterator = _STD reverse_iterator<const_iterator>;

反向常量迭代器类型。

成员函数

构造函数

vector()

直接构造空的 vector。

explicit vector(const _Alloc& _Al) noexcept

从内存分配器构造 vector。

explicit vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Alloc& _Al = _Alloc())

给定长度和内存分配器构造 vector。

vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Ty& _Val, const _Alloc& _Al = _Alloc())

给定长度、值和内存分配器构造 vector。

vector(_Iter _First, _Iter _Last, const _Alloc& _Al = _Alloc())

给定迭代器左闭右开区间和内存分配器构造 vector。

vector(initializer_list<_Ty> _Ilist, const _Alloc& _Al = _Alloc())

列表初始化并给定内存分配器构造 vector。

vector(const vector& _Right)

从另一个 vector 构造 vector。

vector(const vector& _Right, const _Identity_t<_Alloc>& _Al)

从另一个 vector 根据内存分配器构造 vector。

vector(vector&& _Right) noexcept

从右值 vector 构造 vector。

vector(vector&& _Right, const _Identity_t<_Alloc>& _Al_) noexcept(_Alty_traits::is_always_equal::value)

从右值 vector 给定内存分配器构造 vector。

析构函数

~vector()

析构 vector 时调用。

push_back

void push_back(const _Ty& _Val)

在 vector 末尾插入一个新元素。

void push_back(_Ty&& _Val)

在 vector 末尾插入一个新元素(右值引用)。

emplace

iterator emplace(const_iterator _Where, _Valty&&... _Val)

在一个位置构造元素并插入。

insert

iterator insert(const_iterator _Where, const _Ty& _Val)

在一个位置插入元素。

iterator insert(const_iterator _Where, _Ty&& _Val)

在一个位置插入元素(右值引用)。

iterator insert(const_iterator _Where, const size_type _Count, const _Ty& _Val)

在一个位置插入多个同样的元素。

iterator insert(const_iterator _Where, _Iter _First, _Iter _Last)

在一个位置插入一个迭代器左闭右开区间的元素。

iterator insert(const_iterator _Where, initializer_list<_Ty> _Ilist)

在一个位置插入一个列表。

assign

void assign(_CRT_GUARDOVERFLOW const size_type _Newsize, const _Ty& _Val)

将某一长度的元素替换为指定元素。

resize

void resize(_CRT_GUARDOVERFLOW const size_type _Newsize)

将 vector 清空为指定长度的空元素。

void resize(_CRT_GUARDOVERFLOW const size_type _Newsize, const _Ty& _Val)

将 vector 清空为指定长度,并初始化为给定元素。

reserve

void reserve(_CRT_GUARDOVERFLOW size_type _Newcapacity)

预先分配指定长度的空间。

pop_back

void pop_back() noexcept

弹出最后一个元素,vector 不能为空。

erase

iterator erase(const_iterator _Where) noexcept(is_nothrow_move_assignable_v<value_type>)

删除一迭代器上的元素。

iterator erase(const_iterator _First, const_iterator _Last) noexcept(is_nothrow_move_assignable_v<value_type>)

删除迭代器左闭右开区间的元素。

clear

void clear() noexcept

清空 vector。

swap

void swap(vector& _Right) noexcept

与另一个 vector 交换。

data

_Ty* data() noexcept

返回元素实际存储的位置。

const _Ty* data() const noexcept

返回元素实际存储的位置(常量指针)。

begin

iterator begin() noexcept

返回第一个元素的迭代器。

const_iterator begin() const noexcept

返回第一个元素的只读迭代器。

end

iterator end() noexcept

返回最后一个元素的后面一个元素的迭代器。

const_iterator end() const noexcept

返回最后一个元素的后面一个元素的只读迭代器。

rbegin

reverse_iterator rbegin() noexcept

返回反向迭代器(最后一个元素)。

const_reverse_iterator rbegin() const noexcept

返回反向只读迭代器(最后一个元素)。

rend

reverse_iterator rend() noexcept

返回反向迭代器(第一个元素的前面一个元素)。

const_reverse_iterator rend() const noexcept

返回反向只读迭代器(第一个元素的前面一个元素)

cbegin

const_iterator cbegin() const noexcept

begin 的常量版本。

cend

const_iterator cend() const noexcept

end 的常量版本。

crbegin

const_reverse_iterator crbegin() const noexcept

rbegin 的常量版本、

crend

const_reverse_iterator crend() const noexcept

rend 的常量版本。

size

size_type size() const noexcept

返回 vector 已存储的元素长度。

max_size

返回 vector 最大能够存储的长度。

size_type max_size() const noexcept

capacity

size_type capacity() const noexcept

返回 vector 在不扩容的情况下最多能够存储的最大元素数量。

at

_Ty& at(const size_type _Pos)

返回指定下标上的元素。(有越界检查)

const _Ty& at(const size_type _Pos) const

返回指定下标上的元素(常量引用)。(有越界检查)

front

_Ty& front() noexcept

返回第一个元素的引用。

const _Ty& front() const noexcept

返回第一个元素的常量引用。

back

_Ty& back() noexcept

返回最后一个元素的引用。

const _Ty& back() const noexcept

返回最后一个元素的常量引用。

get_allocator

allocator_type get_allocator() const noexcept

获取内存分配器。

重载运算符

operator=

vector& operator=(vector&& _Right) noexcept(_Choose_pocma_v<_Alty> != _Pocma_values::_No_propagate_allocators)

vector 之间的赋值。

vector& operator=(initializer_list<_Ty> _Ilist)

将 vector 赋值为列表。

operator[]

_Ty& operator[](const size_type _Pos) noexcept

返回指定下标上的元素。(没有越界检查)

const _Ty& operator[](const size_type _Pos) const noexcept

返回指定下标上的元素(常量引用)。(没有越界检查)

非成员函数

swap

void swap(vector<_Ty, _Alloc>& _Left, vector<_Ty, _Alloc>& _Right) noexcept

交换两个 vector。

非成员重载运算符

operator==

bool operator==(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right)

返回两个 vector 是否相等。

operator!=

bool operator!=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right)

返回两个 vector 是否不相等、

operator<

bool operator<(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right)

返回第一个 vector 是否小于第二个 vector。

operator>

bool operator>(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right)

返回第一个 vector 是否大于第二个 vector。

operator

bool operator<=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right)

返回第一个 vector 是否小于等于第二个 vector。

operator>=

bool operator>=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right)

返回第一个 vector 是否大于等于第二个 vector。