【总结】2020暑假集训--STL

不定长数组–vector

概念:

v e c t o r vector vector直译为“向量”,一般说成“变长数组”,也就是长度根据需要而自动改变的数组,有些题目需要开很多数组,往往造成内存超限,使用 v e c t o r vector vector简单方便,还可节省空间,使用 v e c t o r vector vector,必须加#include<vector> using namespace std;

定义:

vector<typename> name;

其中typename为数据类型,name为定义的不定长数组的数组名

eg.vector<int> v; 表示定义了一个数据类型为int,名为v的不定长数组

其中typename也可以是一个STL容器

vector<vector<int> > a;  //定义了一个两个维度都可变的二维整型数组a 

注意vector<vector<int > > 这里两个>之间一定要加空格,不然编译器会误认为是位运算的左移符号“>>”

访问

访问vector中的元素一般有两种方式:下标访问 和 迭代器(iterator)访问

下标访问

对于容器vector<int> v,可以使用v[index]来访问它的第index个元素。其中,0≤index≤v.size() – 1,v.size()表示vector中元素的个数。

迭代器访问

可以将迭代器理解为一种类似指针的变量,使用前需要提前定义,其定义为:vector<typename>::iterator it,这个it就是一个迭代器,可以通过“*it”来访问该容器里的元素值:

vector<int>::iterator it = v.begin()//定义一个迭代器it,初始化为容器v的首元素地址
*it//相当于v[0];
*(it + i)//相当于v[i]。

迭代器还可以进行自加自减操作,如it++,++it,it–,--it,注意:迭代器不支持“it<v.end()”的写法,只能是“it != v.end()”, v.end()并不是取v容器尾元素地址,而是尾元素下一个地址

for(vector<int>::iterator it=v.begin();it!=v.end();it++){
   
	printf("%d",*it);
}

常用函数

1.push_back()

push_back(x)将x添加到容器最后,并相应让长度+1,时间复杂度为 O ( 1 ) O(1) O(1)

2.size()

size()用来获得vector中元素个数,时间复杂度为O(1),同时,还可以使用resize(n)重设数组大小。例如以下代码输出12300:

vector<int> v;
for(int i=1;i<=3;i++){
   
	v.push_back(i);
}
v.resize(5);
for(int i=0;i<v.size();i ++){
   
	printf("%d",v[i]);
}

3.pop_back()

用来删除vector中的尾元素,并相应让长度-1。时间复杂度为O(1),例如以下代码输出12:

vector<int> v;
for(int i=1;i<=3;i ++){
   
	v.push_back(i);
}
v.pop_back();
for(int i=0;i<v.size();i++){
   
	printf("%d",v[i]);
}

4.clear()

用来清空vector中的所有元素。时间复杂度为O(n),例如以下代码输出0:

vector<int> v;
for(int i=1
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值