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 noexceptbegin 的常量版本。
cend
const_iterator cend() const noexceptend 的常量版本。
crbegin
const_reverse_iterator crbegin() const noexceptrbegin 的常量版本、
crend
const_reverse_iterator crend() const noexceptrend 的常量版本。
size
size_type size() const noexcept返回 vector 已存储的元素长度。
max_size
返回 vector 最大能够存储的长度。
size_type max_size() const noexceptcapacity
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。