vector
简介
vector
是 STL 当中的一种变长数组,它的长度可以由元素数量自动变长。同时,它也支持随机访问元素,还封装了一大堆成员函数来供我们使用。值得注意的是,由于是一个 class
,并且还可以自动分配内存,那么速度自然要比普通的数组要慢。
模板原型
template <class _Ty, class _Alloc = allocator<_Ty>>
class vector;
其中,_Ty
表示变长数组里面存储的对象类型,_Alloc
表示边长数组的内存分配器类型。
成员函数
构造函数:
函数原型 |
用途 |
vector() |
构造一个空的容器 |
vector(const vector &_Right) |
从另一个容器 _Right 里面拷贝元素到当前容器里面 |
explicit vector(const _Alloc &_Al) |
构造拥有给定内存分配器 _Al 的空容器 |
explicit vector(const size_type _Count, const _Alloc& _Al = _Alloc()) |
构造拥有 _Count 个元素的容器; |
explicit vector(const size_type _Count, const _Ty& _Val, const _Alloc& _Al = _Alloc()) |
构造拥有 _Count 个元素的容器,并把所有的元素赋为 _Val |
vector(_Iter _First, _Iter _Last, const _Alloc& _Al = _Alloc()) |
将 [_First, _Last) 里面的元素拷贝到当前容器里面 |
vector(initializer_list<_Ty> _Ilist, const _Alloc& _Al = _Alloc()) |
把列表 _Ilist 里面的元素拷贝到容器里面 |
访问元素
函数原型 |
用途 |
补充说明 |
_Ty &at(const size_type _Pos) |
带越界检查地去访问位于索引 _Pos 下的元素的引用 |
越界了抛异常 |
_Ty& operator[](const size_type _Pos) noexcept |
不带越界检查地去访问位于索引 _Pos 下的元素的引用 |
越界了不抛异常 |
_Ty &front() noexcept |
不带越界检查地访问第一个元素的引用 |
等同于 operator[](0) 或 at(0) |
_Ty &front() noexcept |
不带越界检查地最后第一个元素的引用 |
等同于 operator[](size() - 1) 或 at(size() - 1) |
_Ty* data() noexcept |
直接访问底层数组存储 |
数组为空不抛异常 |
修改元素
函数原型 |
用途 |
void clear() noexcept |
清空所有的元素 |
iterator insert(const_iterator _Where, const _Ty& _Val) |
在迭代器 _Where 之前插入元素 _Val |
iterator insert(const_iterator _Where, const size_type _Count, const _Ty& _Val) |
在迭代器 _Where 之前插入元素 _Count 个 _Val |
iterator insert(const_iterator _Where, _Iter _First, _Iter _Last) |
在迭代器 _Where 之前插入区间 [_First, _Last) |
iterator insert(const_iterator _Where, initializer_list<_Ty> _Ilist) |
在迭代器 _Where 之前插入列表 _Ilist |
iterator emplace(const_iterator _Where, _Valty&&... _Val) |
在迭代器 _Where 之前原地构造单个元素 |
void push_back(const _Ty& _Val) |
在最后一个元素末尾插入元素 _Val ,等同于 insert(end(), _Val) |
emplace_back(_Valty&&... _Val) |
在最后一个元素末尾原地构造元素,等同于 emplace(end(), _Val...) |
iterator erase(const_iterator _Where) noexcept |
删除迭代器 _Where 指向的元素 |
iterator erase(const_iterator _First, const_iterator _Last) noexcept |
删除 [_First, _Last) 之间的元素 |
void pop_back() noexcept |
删除最后一个元素,等同于 erase(prev(end())) |
void resize(const size_type _Newsize, const _Ty& _Val = _Ty()) |
改变容器大小为 _Newsize ,并把所有元素赋为 _Val |
void swap(vector& _Right) noexcept |
交换容器,注意只交换了元素和长度,没有交换迭代器。时间复杂度为 \(\mathcal O(1)\) |
查询容量
函数原型 |
用途 |
size_type size() const noexcept |
查询元素数量 |
bool empty() const noexcept |
查询容器是否为空,等价于 !size() |
size_type max_size() const noexcept |
查询可容纳的最大元素数 |