一、vector的描述
vector是C++的STL(标准模板库)最常用的容器之一,与array相似,都是C/C++中普通数组的升级版。与array(数组容量固定)不同的是,vector是动态分配内存的,即:数组的容量不是固定的,可以动态的对数组中的数据进行增删,同时动态的进行内存分配和释放。
1.1、vector的基本使用
1.1.1、vector的头文件
#include<vector>
using namespace std;
1.1.2、vector的容器的几种创建方式
vector根据不同应用场景有如下几种创建方式
vector<double> values;//创建空double类型的空容器
vector<int> Arrs{1,2,3,4,5,6,7,8,9};//创建整型的容器并初始化,注意这里初始化应该用大括号({})而不是中括号
vector<int>::const_iterator first = Arrs.behin()+1;//第二个迭代容器
vector<int>::const_iterator last = Arrs.end()-1;//倒数第二个迭代器
vector<int> Arrs2(first,last);//创建整型的容器,并初始化为Arrs的第二个到第八个:{2,3,4,5,6,7,8}
vector<float> Arrs3(5,6.0);//创建浮点型容器,并初始化为5个元素的值均为6.0:{6.0,6.0,6.0,6.0,6.0}
1.2、vector成员函数
vector容器不但拥有普通数组的基本功能:根据索引返回值、插入、删除、迭代器等
1.2.1、成员函数功能描述
函数成员 | 函数功能 |
---|---|
begin()/rbegin() | 返回指向容器中的第一个元素的迭代器 |
end()/rend() | 返回指向容器中的最后一个元素的迭代器 |
cbegin()/crbegin() | 和begin()功能相同,只不过在此基础上,增加了const属性,不能修改元素 |
cend()/crend() | 和end()功能相同,只不过在此基础上,增加了const属性,不能修改元素 |
size() | 返回实际元素个数 |
resize() | 改变实际元素的个数 |
empty() | 判断容器是否有元素:有返回false,没有返回true |
capacity() | 返回当前容量 |
reverse() | 增加容器的容量 |
shrink_to_fit() | 将内存减少到等于当前元素实际使用大小 |
at() | 使用经过边界检查的索引访问元素 |
front() | 返回第一个元素 |
back() | 返回最后一个元素 |
data() | 返回指向容器第一个元素的指针 |
push_back() | 在容器末尾添加元素 |
assign() | 用新元素替换原有内容 |
pop_back() | 删除容器尾部元素 |
insert() | 在指定位置插入一个或多个元素 |
erase() | 一处一个元素或者一段元素 |
clear() | 移除所有的元素,容器大小变为0 |
swap() | 交换两个容器的所有元素 |
emplace() | 在指定位置生成一个元素 |
1.3、vectorde 数组片段截取操作
数组片段截取就是将vector数组的某一段连续的区间单独提取出来存储在另外一个vector数组。比如有一个5个元素的数组Arras,需要将中间的三个元素单独作为数组存在另一个数组Arrs2:
//怎么才能将Arrs的中间三个元素,放到Arrs去?
vector<int> Arrs{1,2,3,4,5};
vector<int> Arrs2;
1.3.1、初始化截取
vector<double> values;//创建空double类型的空容器
vector<int> Arrs{1,2,3,4,5};//创建整型的容器并初始化,注意这里初始化应该用大括号({})而不是中括号
vector<int>::const_iterator first = Arrs.behin()+1;//第二个迭代器
vector<int>::const_iterator last = Arrs.end()+3//第三个迭代器
vector<int> Arrs2(first,last);//创建整型的容器,并初始化为Arrs的第二个到第四个:{2,3,4}
迭代器是指可在容器对象上遍访的对象
1.3.2、assign()功能函数实现截取
assign()功能函数是vector容器的成员函数。
原型:
void assign(const_iterator first,const_iterator last);//两个指针,分别指向开始和结束的地方
void assign(size_type n.const T&x=T());//n只要构造的vector成员的个数,x指成员的数值,它的类型必须要与vector类型一致
vector<int> Arrs{1,2,3,4,5};
vector<int>::const_iterator first = Arrs.behin()+1;//第二个迭代器
vector<int>::const_iterator last = Arrs.end()+3//第三个迭代器
vector<int> Arrs2;
Arrs2.assign(first,last);//使用assign()成员函数将Arrs对应位置的值存入Arrs2数组中
1.3.3、功能打包
下面代码是将vector数组片段截取操作的函数打包。第一个函数的思路是给定区间左右边界相对于数组首迭代元素的位置,第二个元素是重载函数,思路是直接给定区间左右边界的迭代元素。
1.4、vector数组合并
数组合并是指将多个不同的vector数组合并到一个vector数组中。