符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
目录
你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都做网站、成都网站制作、企业网站建设、成都手机网站制作、网页设计、品牌网站制作、网页制作、做网站、建网站。创新互联拥有实力坚强的技术研发团队及素养的视觉设计专才。课前唠一唠
学习过程
vector的定义
方法
vector的访问
vector的常用函数
小结
OK,大家好,我又来啦,那么这期讲一下C++的一个知识点——vector……
学习过程C++功能强大,为开发者提供了标准模板库(standard template library,STL),其中封装了很多实用的容器。容器可以理解成能够实现很多功能的系统函数,或者说是一种用来存放数据的对象,开发者可以根据接口规范(调用格式)直接调用,而不用关心其内部实现的原理和具体代码,十分方便快捷。常见的容器有vector,stack,queue,map,set等……
vector直接翻译为“向量”,一般说成“变长数组”,也即“长度根据需要而自动改变的数组”。在信息学竞赛中,有些题目需要定义很大的数组,这样会出现“超出内存限制”的错误。比如,如果一个图的顶点太多,使用邻接矩阵就会超出内存限制,使用指针实现邻接表又很容易出错,而使用vector实现简洁方便,还可以节省存储空间。
使用vector,首先需要添加vector头文件,即include
vectorname;
以上定义相当于定义了一个一维数组name[size],只是size不确定,其长度可以根据需要而变化。其中,typename可以是任何基本类型,如int,double,char,结构体等,也可以是STL标准容器,如vector,queue等。例如:
vectora;
vectorscore;
vectorstu;//node为已经定义了的结构体
但是,如果typename也是一个STL容器,那么定义时需要在两个“>”的符号之间加上一个空格,因为“>>”在C++11标准之前的编译器里会作为“移位”操作,从而导致编译错误。例如:
vector>a;
这个格式很容易让人想起二维数组的定义,即一个一维数组的每一个元素又是一个一维数组。对于多维数组,vector操作的核心思想就是“高维向低维转化”。例如:
vectorv[100];//定义一个一维长度已经固定为100的二维数组,另外一维长度不固定
vector>a;//定义一个两个维度长度都可变的二维数组
vector的访问访问vector中的元素一般有两种方式。
第一种是通过“下标”访问。例如,对于容器vector
第二种方式是通过“迭代器”访问。可以将迭代器(iterator)理解为一种类似指针的变量。其定义为:
vector::iterator it;
这样,it就是一个vector
vector::iterator it;
就是定义一个迭代器it,并且通过“*it”来访问int类型的vector里的元素。例如:
vector::iterator it= v.begin();//v.begin()为取v的首元素地址,而it指向这个地址,相当于v[0]。v[i]和*(v.begin()+i)是等价的
for(int i=0;i<=5;i++) printf("%d",*(it+i));//输出v[i]
在常用的STL容器中,只有vector和string允许使用“v.begin()+3”这种迭代器加上整数的写法。同时,迭代器也可以进行自加,自减操作,即it++,++it,it--和--it。例如:
for(vector::iterator it = v.begin();it!=v.end();it++)
printf("%d",*it);//输出v[i]
需要注意的是:v.end()并不是取v的尾元素地址,而是尾元素地址的下一个地址,作为迭代器末尾标志不存储任何元素。
vector的常用函数前面已经介绍了两个vector函数:begin()和end()。需要注意的是,这是一种“左闭右开”的表示方法。下面介绍其他几个常用的vector函数。
(1)push_back():push_back(x)用来在vector后面添加一个元素x,时间复杂度为0(1)。
(2)size():如果是一维数组,size()用来获得vector中元素的个数;如果是二维数组,size()用来获得vector中第二维的元素个数,时间复杂度为0(1)。同时,还可以使用resize(n)重设数组的大小。例如,以下一段代码输出“12300”。
vectorv;
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():pop_back()用来删除vector的尾元素,时间复杂度为0(1)。例如,以下代码段输出“12”。
vectorv;
for(int i = 1;i<= 3;i++) v.puch_back(i);
v.pop_back();
for(int i = 0;i< v.size();i++) printf("%d",v[i]);
(4)clear():clear()用来清空vector中的所有元素,时间复杂度为0(n),其中n为vector中元素的个数。例如,以下一段代码输出“0”。
vectorv;
for(int i = 1;i<= 3;i++) v.push_back(i);
v.clear();
printf("%d",v.size());
(5)insert():insert(it,x)用来向vector任意迭代器it处插入一个元素x,时间复杂度为0(n)。例如,以下一段代码输出“1 2 -1 3 4 5”。
vectorv;
for(int i = 1;i<= 5;i++) v.push_back(i);
v.insert(v.begin()+2,-1);//将-1插入到v[2]处
for(int i = 0;i< v.size();i++)printf("%d",v[i]);
(6)erase():erase()用来删除vector中的元素,有两种方法。一种是erase(it),删除迭代器it处的元素;另一种是erase(first,last),删除左闭右开区间[first,last)内的所有元素。例如,以下一段代码输出“1 5”。
vectorv;
for(int i = 1;i<= 5;i++) v.push_back(i);
v.erase(v.begin()+1,v.begin()+4);//删除v[1],v[2],v[3]
for(int i = 0;i< v.size();i++)printf("%d",v[i]);
小结这节课大家都听你懂了吗?(博主写了一天了,累死了,求求给一个赞吧,谢谢了),听懂了的话记得三连交一下学费,那么这期就到此为止了,我们下期再见,拜拜┏(^0^)┛!!!
PS:给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!给个赞吧!!!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧