数据结构二、vector

         上次介绍了如何模拟实现一个静态顺序表,那么如何实现一个动态顺序表呢?其实,动态顺序表的实现需要用到new和delete来申请和释放内存空间,在算法竞赛中会面临超时的风险,如果需要用到动态顺序表,我们有更好的方式:C++的STL为我们提供了一个已经封装好的容器——vector,它的底层就是一个会自动扩容的顺序表,因此也被称为可变长的数组,下面就重点学习vector的使用(记得包含头文件#include<vector>)

   1.创建vector

创建一个vector,我们有很多种形式。第一种:vector<int> a1.这也是最常用的一种形式,这个代码的意思是创建一个空的可变长数组a1,里面都是int类型的数据。 第二种:vector<int> a2(10)。意思是创建一个可变长数组a2,只不过a2的空间大小已经指定好为10,里面的值默认为零。第三种:vector<int> a3(10, 5).和a2类似,a3的空间大小也是10,但a3里面的元素都是5。第四种,也是和一维数组初始化十分类似的一种创建方式:vector<int> a4 = {1, 2, 3, 4}.使用列表的形式初始化创建了一个vector。值得一提的是,<>里面不只是可以存放int类型,也可以存放其他任意类型,包括字符串类型(string)、结构体类型(struct node),甚至可以再存放一个STL,这就是模板的作用,也是模版强大之处。同时也要把第二中实现方式和这种区分开——vector<int> a5[10]。这种表示创建一个大小为10的数组a5,里面的类型都是vector<int>类型。

   2.vector中的函数——size&empty

①size:返回实际元素的个数。一般用于遍历整个vector数组  ②empty:判断顺序表是否为空,因此是一个bool类型的返回值,如果为空,则返回true,不为空,则返回false。

3.vector中的函数——begin&end 

begin能返回起始位置的迭代器(左闭),而end能返回终点位置的下一个位置的迭代器(右开)。其中,迭代器的类型为vector<int>::iterator,不过我们一般会用auto来简化。利用迭代器,我们可以访问整个vector,存在迭代器的容器就可以使用范围for来遍历 。

4.vector中的函数——push_back&pop_back 

 push_back:尾部添加一个元素,pop_back:尾部删除一个元素。当然还有insert和erase,不过由于时间复杂度过高,竞赛中基本不会去使用。这两个函数使用起来很简单,就不做代码实现了~

5.vector中的函数——front&back 

front:返回头部元素,back:返回尾元素。同样,这两个函数使用起来很简单,就不做代码实现了

 6.vector中的函数——resize

 resize:修改vector的大小。如果大于原始大小,多出来的位置会补上默认值(一般是0);如果小于原始大小,相当于会把后面的元素全部删掉。

       以上就是vector在算法竞赛中的全部内容了,当然,vector内部封装的接口还有很多,要么不常用,要么时间复杂度过高,在算法竞赛中不能频繁调用。因此,在这里和往后,介绍的都是常用及高效的接口 。那我们下节再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值