跳转至

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 查询可容纳的最大元素数

评论