vector 是一种常用的容器类,在 C++ 当中普遍用作变长数组。 ## 定义 ```cpp template <class T, class Allocator = std::allocator<T>> class vector // In namespace std ``` ## 成员类型 ### value_type ```cpp using value_type = _Ty; ``` 元素类型。 ### allocator_type ```cpp using allocator_type = _Alloc; ``` 内存分配器类型。 ### pointer ```cpp using pointer = typename _Alty_traits::pointer; ``` 指针类型。 ### const_pointer ```cpp using const_pointer = typename _Alty_traits::const_pointer; ``` 常量指针类型。 ### reference ```cpp using reference = _Ty&; ``` 引用类型。 ### const_reference ```cpp using const_reference = const _Ty&; ``` 常量引用类型。 ### size_type ```cpp using size_type = typename _Alty_traits::size_type; ``` 长度类型。 ### difference_type ```cpp using difference_type = typename _Alty_traits::difference_type; ``` 差异类型。 ### iterator ```cpp using iterator = _Vector_iterator<_Scary_val>; ``` 迭代器类型。 ### const_iterator ```cpp using const_iterator = _Vector_const_iterator<_Scary_val>; ``` 常量迭代器类型。 ### reverse_iterator ```cpp using reverse_iterator = _STD reverse_iterator<iterator>; ``` 反向迭代器类型。 ### const_reverse_iterator ```cpp using const_reverse_iterator = _STD reverse_iterator<const_iterator>; ``` 反向常量迭代器类型。 ## 成员函数 ### 构造函数 ```cpp vector() ``` 直接构造空的 vector。 ```cpp explicit vector(const _Alloc& _Al) noexcept ``` 从内存分配器构造 vector。 ```cpp explicit vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Alloc& _Al = _Alloc()) ``` 给定长度和内存分配器构造 vector。 ```cpp vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Ty& _Val, const _Alloc& _Al = _Alloc()) ``` 给定长度、值和内存分配器构造 vector。 ```cpp vector(_Iter _First, _Iter _Last, const _Alloc& _Al = _Alloc()) ``` 给定迭代器左闭右开区间和内存分配器构造 vector。 ```cpp vector(initializer_list<_Ty> _Ilist, const _Alloc& _Al = _Alloc()) ``` 列表初始化并给定内存分配器构造 vector。 ```cpp vector(const vector& _Right) ``` 从另一个 vector 构造 vector。 ```cpp vector(const vector& _Right, const _Identity_t<_Alloc>& _Al) ``` 从另一个 vector 根据内存分配器构造 vector。 ```cpp vector(vector&& _Right) noexcept ``` 从右值 vector 构造 vector。 ```cpp vector(vector&& _Right, const _Identity_t<_Alloc>& _Al_) noexcept(_Alty_traits::is_always_equal::value) ``` 从右值 vector 给定内存分配器构造 vector。 ### 析构函数 ```cpp ~vector() ``` 析构 vector 时调用。 ### push_back ```cpp void push_back(const _Ty& _Val) ``` 在 vector 末尾插入一个新元素。 ```cpp void push_back(_Ty&& _Val) ``` 在 vector 末尾插入一个新元素(右值引用)。 ### emplace ```cpp iterator emplace(const_iterator _Where, _Valty&&... _Val) ``` 在一个位置构造元素并插入。 ### insert ```cpp iterator insert(const_iterator _Where, const _Ty& _Val) ``` 在一个位置插入元素。 ```cpp iterator insert(const_iterator _Where, _Ty&& _Val) ``` 在一个位置插入元素(右值引用)。 ```cpp iterator insert(const_iterator _Where, const size_type _Count, const _Ty& _Val) ``` 在一个位置插入多个同样的元素。 ```cpp iterator insert(const_iterator _Where, _Iter _First, _Iter _Last) ``` 在一个位置插入一个迭代器左闭右开区间的元素。 ```cpp iterator insert(const_iterator _Where, initializer_list<_Ty> _Ilist) ``` 在一个位置插入一个列表。 ### assign ```cpp void assign(_CRT_GUARDOVERFLOW const size_type _Newsize, const _Ty& _Val) ``` 将某一长度的元素替换为指定元素。 ### resize ```cpp void resize(_CRT_GUARDOVERFLOW const size_type _Newsize) ``` 将 vector 清空为指定长度的空元素。 ```cpp void resize(_CRT_GUARDOVERFLOW const size_type _Newsize, const _Ty& _Val) ``` 将 vector 清空为指定长度,并初始化为给定元素。 ### reserve ```cpp void reserve(_CRT_GUARDOVERFLOW size_type _Newcapacity) ``` 预先分配指定长度的空间。 ### pop_back ```cpp void pop_back() noexcept ``` 弹出最后一个元素,vector 不能为空。 ### erase ```cpp iterator erase(const_iterator _Where) noexcept(is_nothrow_move_assignable_v<value_type>) ``` 删除一迭代器上的元素。 ```cpp iterator erase(const_iterator _First, const_iterator _Last) noexcept(is_nothrow_move_assignable_v<value_type>) ``` 删除迭代器左闭右开区间的元素。 ### clear ```cpp void clear() noexcept ``` 清空 vector。 ### swap ```cpp void swap(vector& _Right) noexcept ``` 与另一个 vector 交换。 ### data ```cpp _Ty* data() noexcept ``` 返回元素实际存储的位置。 ```cpp const _Ty* data() const noexcept ``` 返回元素实际存储的位置(常量指针)。 ### begin ```cpp iterator begin() noexcept ``` 返回第一个元素的迭代器。 ```cpp const_iterator begin() const noexcept ``` 返回第一个元素的只读迭代器。 ### end ```cpp iterator end() noexcept ``` 返回最后一个元素的后面一个元素的迭代器。 ```cpp const_iterator end() const noexcept ``` 返回最后一个元素的后面一个元素的只读迭代器。 ### rbegin ```cpp reverse_iterator rbegin() noexcept ``` 返回反向迭代器(最后一个元素)。 ```cpp const_reverse_iterator rbegin() const noexcept ``` 返回反向只读迭代器(最后一个元素)。 ### rend ```cpp reverse_iterator rend() noexcept ``` 返回反向迭代器(第一个元素的前面一个元素)。 ```cpp const_reverse_iterator rend() const noexcept ``` 返回反向只读迭代器(第一个元素的前面一个元素) ### cbegin ```cpp const_iterator cbegin() const noexcept ``` begin 的常量版本。 ### cend ```cpp const_iterator cend() const noexcept ``` end 的常量版本。 ### crbegin ```cpp const_reverse_iterator crbegin() const noexcept ``` rbegin 的常量版本、 ### crend ```cpp const_reverse_iterator crend() const noexcept ``` rend 的常量版本。 ### size ```cpp size_type size() const noexcept ``` 返回 vector 已存储的元素长度。 ### max_size 返回 vector 最大能够存储的长度。 ```cpp size_type max_size() const noexcept ``` ### capacity ```cpp size_type capacity() const noexcept ``` 返回 vector 在不扩容的情况下最多能够存储的最大元素数量。 ### at ```cpp _Ty& at(const size_type _Pos) ``` 返回指定下标上的元素。(有越界检查) ```cpp const _Ty& at(const size_type _Pos) const ``` 返回指定下标上的元素(常量引用)。(有越界检查) ### front ```cpp _Ty& front() noexcept ``` 返回第一个元素的引用。 ```cpp const _Ty& front() const noexcept ``` 返回第一个元素的常量引用。 ### back ```cpp _Ty& back() noexcept ``` 返回最后一个元素的引用。 ```cpp const _Ty& back() const noexcept ``` 返回最后一个元素的常量引用。 ### get_allocator ```cpp allocator_type get_allocator() const noexcept ``` 获取内存分配器。 ## 重载运算符 ### operator= ```cpp vector& operator=(vector&& _Right) noexcept(_Choose_pocma_v<_Alty> != _Pocma_values::_No_propagate_allocators) ``` vector 之间的赋值。 ```cpp vector& operator=(initializer_list<_Ty> _Ilist) ``` 将 vector 赋值为列表。 ### operator\[\] ```cpp _Ty& operator[](const size_type _Pos) noexcept ``` 返回指定下标上的元素。(没有越界检查) ```cpp const _Ty& operator[](const size_type _Pos) const noexcept ``` 返回指定下标上的元素(常量引用)。(没有越界检查) ## 非成员函数 ### swap ```cpp void swap(vector<_Ty, _Alloc>& _Left, vector<_Ty, _Alloc>& _Right) noexcept ``` 交换两个 vector。 ## 非成员重载运算符 ### operator== ```cpp bool operator==(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) ``` 返回两个 vector 是否相等。 ### operator!= ```cpp bool operator!=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) ``` 返回两个 vector 是否不相等、 ### operator< ```cpp bool operator<(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) ``` 返回第一个 vector 是否小于第二个 vector。 ### operator> ```cpp bool operator>(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) ``` 返回第一个 vector 是否大于第二个 vector。 ### operator<= ```cpp bool operator<=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) ``` 返回第一个 vector 是否小于等于第二个 vector。 ### operator>= ```cpp bool operator>=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) ``` 返回第一个 vector 是否大于等于第二个 vector。