C++ vector常用用法


vector作为C++ STL顺序容器中较为常用的一种,在刷leetcode时使用vector总有些方法和用法会忘记,故写此文记录一下。

vector初始化

//通过列表初始化
vector<int> vec = {1,2,3,4,5};
//通过相同的对象进行初始化
vector<int> vec1(vec);
//与顺序容器大小相关的构造函数,不仅是vector适用,对于list、forward_list、deque也同样适用
vector<int> ivec(10,1);  //表示生成10个int元素,初始化为1
//下面这种情况是危险的,只进行了定义,未进行初始化,如果程序中不小心使用很容易产生未知的结果
vector<int> ivec(10);

vector常用函数

vector<int> ivec(10,1);
ivec.push_back(num);    //向ivec尾部添加元素num,无返回
ivec.push_front(num);   //向ivec首部添加元素num,无返回
ivec.empty();           //判断ivec是否为空,为空则返回true
ivec.pop_back(num);     //向ivec尾部删除元素num,无返回
ivec.pop_front(num);    //向ivec首部删除元素num,无返回
ivec.size();            //返回ivec的大小
ivec.clear();           //删除ivec中的所有元素,返回void

vector常用访问操作

1.通过下标实现随机访问

vector<int> ivec(10);
//vector使用起来可以实现和数组一样的随机访问,vector本质上是一种动态数组结构
for(int i=0; i<ivec.size(); ++i){
	ivec[i] = i;
}

2.通过迭代器实现遍历

vector<int> ivec(10,1);
vector<int>::iterator it;   //定义迭代器
for(it = ivec.begin(); it!=ivec.end(); ++it){
	*it += 1;
}

这里的iterator是可以更换的,也就是在迭代过程中并未涉及数组元素的变化(比如说在简单的遍历或者是对数组元素做一个统计的时候),可以这么定义迭代器。

vector<int>::const_iterator it;

当然这是一个工程上的习惯,有助于减少程序中可能存在的bug。

配合STL 函数

sort()

sort函数可以对vector进行排序。sort函数有三个参数,第三个参数是默认升序的,这里的话也可以替换为自定义函数,具体不再讲解。

sort(ivec.begin(),ivec.end());
unique()

unique函数是C++标准库函数里面的函数,其功能是去除相邻的重复元素(注意一定是相邻元素,且只保留一个),所以使用前一般需要对数组进行排序。并且那些重复的数据并没有真正的删除,需要配合下面提到的erase函数进行删除。

vector<int> ivec = {1,2,2,3,4,4};
unique(ivec.begin(),ivec.end());
//输出结果:1,2,3,4
erase()

erase有三种用法,这里只介绍迭代器版本的,删除的是包含左边界不包含右边界之间的元素。

vector<int> ivec = {1,2,2,3,4,4};
ivec.erase(ivec.begin(),ivec.begin()+3);  //删除了1,2,2
//遍历ivec输出结果:3,4,4
上面三个函数的结合使用

先使用排序函数sort(),再使用unique函数得到不重复的数组,结合erase函数删除后面的多余重复的数字,在处理某些问题的时候非常好用。

sort(ivec.begin(),ivec.end());
ivec.erase(unique(v.begin(), v.end()), v.end());
reverse()

revese()函数表示倒转,对vector里面的元素进行一个整体的翻转。

reverse(ivec.begin(),ivec.end());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值