《c程序设计类模板与向量.pptx》由会员分享,可在线阅读,更多相关《c程序设计类模板与向量.pptx(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、12、函数模板 c+规定模板以 关键字和一个形参表开头。template 将函数模板与某个具体数据类型连用,就产生了 ,又称这个过程为函数模板实例化,这种形式就是类型参数化。模板函数例如:T max(T a,T b)if(ab)return a;else return b;template 另外,c+还专门定义了一个仅仅用在模板中的关键字 ,它的用途之一是代替template参数列表中的关键字class。typename函数执行时确定参数类型的函数称为模板函数。函数执行时确定参数类型的函数称为模板函数。第1页/共70页22、函数模板 函数模板是不能直接执行的,需要实例化为模板函数后才能执行。使
2、用格式:模板函数名 (实参表)(显式比较准则)或者:模板函数名(实参表)(默认方式)第2页/共70页3如有函数模板如下:template T max(T a,T b)if(ab)return a;else return b;m1=max(3,8);m2=max(3.6,12.5);m3=max(a,A);m1=max(3,8);m2=max(3.6,12.5);m3=max(a,A);或者则对该函数模板的使用有:注:要想省去显式调用的麻烦,条件是由这个调用的函数参数表能够惟一地去标识出模板参数的一个集合。在调用函数模板时,的类型决定到底使用模板的哪个版本。也就是说,模板的参数是由 的参数推断出
3、来的。函数参数函数第3页/共70页4class PointIntint x,y;public:PointInt(int a=0,int b=0):x(a),y(b)void setxy(int a,int b)x=a;y=b;void showxy()coutx,yendl;int getx()return x;int gety()return y;class PointFloatfloat x,y;public:PointFloat(float a=0,float b=0):x(a),y(b)void setxy(float a,float b)x=a;y=b;void showxy()co
4、utx,yendl;float getx()return x;float gety()return y;void main()PointInt a(3,4);a.showxy();PointFloat b(1.2,3.4);b.showxy();分析以下程序的结果(lt7_1a.cpp)第4页/共70页5class PointIntint x,y;public:PointInt(int a=0,int b=0):x(a),y(b)void setxy(int a,int b)x=a;y=b;void showxy()coutx,yendl;int getx()return x;int gety
5、()return y;class PointFloatfloat x,y;public:PointFloat(float a=0,float b=0):x(a),y(b)void setxy(float a,float b)x=a;y=b;void showxy()coutx,yendl;float getx()return x;float gety()return y;分析以下程序的结果(lt7_1a.cpp)分析PointInt类和PointFloat类的异同?类中的数据成员以及实现的操作相同,只是数据类型不同。为了避免因为类的数据类型不同而产生的重复性设计,可以将这些数据类型从类中分离出
6、来形成一个通用的数据类型T,为这个数据类型T设计一个操作集,就是类模板 T TT T T T TTTTTTTT第5页/共70页6将数据类型抽象出来而形成的操作集:class PointT x,y;public:Point(T a=0,T b=0):x(a),y(b)void setxy(T a,T b)x=a;y=b;void showxy()coutx,yendl;T getx()return x;T gety()return y;第6页/共70页77.17.1类模板类模板 类模板使用户可以为类定义一种模式,使得类中的某些数据成员、成员函数的参数和返回值能取得任意数据类型。类模板用于实现类所
7、需数据的类型参数化。所以类模板也称为参数化类。第7页/共70页8一、类模板基础知识一、类模板基础知识1、类模板声明的一般格式:template class 类名 类体;class PointT x,y;public:Point(T a=0,T b=0):x(a),y(b)void setxy(T a,T b)x=a;y=b;void showxy()coutx,yendl;T getx()return x;T gety()return y;template 例如:模版以template关键字和一个形参表开头。第8页/共70页9void setxy(T a,T b)x=a;y=b;Point :
8、template class PointT x,y;public:Point(T a=0,T b=0):x(a),y(b)void setxy(T a,T b)x=a;y=b;void showxy()coutx,yendl;T getx()return x;T gety()return y;void setxy(T a,T b)x=a;y=b;void setxy(T,T);template 注:在类体外面定义成员函数时,必须用template重写类模板声明!第9页/共70页10注:在类体外面定义成员函数时,必须用template重写类模板声明!(P148)一般格式为:template 返回
9、类型 类名:成员函数名(函数参数列表)函数体指template的内使用class(或typename)声明的类型参数。如上例中的:template void Point:setxy(T a,T b)x=a;y=b;第10页/共70页112 2、类模板对象、类模板对象 类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。初始化类模板时,只要传给它指定的数据类型(如int,float,double等),编译器就用指定的类型代替模板参数产生相应的模板类。用类模板定义对象的一般格式:类名 对象名(构造函数实参列表)或者:类名 对象名 编译器不能从构造函数参数列表推断出模板实例
10、化参数类型,所以必须显式地给出对象的参数类型第11页/共70页12例如:template class PointT x,y;public:Point(T a=0,T b=0):x(a),y(b)void setxy(T a,T b)x=a;y=b;void showxy()coutx,yendl;T getx()return x;T gety()return y;void main()Point a(3,4);a.showxy();Point b(1.2,3.4);b.showxy();显式地给出对象的参数类型第12页/共70页13例题:分析以下程序结果(lt7_3.cpp)#include
11、using namespace std;template class sumT msize;public:sum(T a=0,T b=0,T c=0,T d=0)m0=a;m1=b;m2=c;m3=d;T s()T add=0;for(int i=0;isize;i+)add+=mi;return add;void main()sum x(1,2,3,4);sum y(a,1,-32,1);sum z(1.2,2.3,3.4,4.5);coutx.s()endl;couty.s()endl;coutz.s()endl;第13页/共70页14二、类模板的派生与继承二、类模板的派生与继承二、类模板
12、的派生与继承二、类模板的派生与继承 类模板也可以继承。声明模板继承之前,必须重新声明类模板。模板类的基类和派生类都可以是模板类或者非模板类,本节只介绍其中两种情况:1 1、从非模板类派生类模板、从非模板类派生类模板第14页/共70页15class Point /非模板类protected:int x,y;public:Point(int a=0,int b=0):x(a),y(b)void showxy()coutx,yendl;template /从非模板类派生类模板class Line:public Point T x2,y2;public:Line(int a,int b,T c,T d
13、):Point(a,b)x2=c;y2=d;void setline(int a,int b,T c,T d)x=a;y=b;x2=c;y2=d;void showLine()coutPoint1坐标:;showxy();coutPoint2坐标:;coutx2,y2endl;T length()return sqrt(x2-x)*(x2-x)+(y2-y)*(y2-y);void main()Line a(1,1,1,3);a.showLine();couta线段长度:a.length()endl;Line b(1,1,1.0,5.8);coutb线段长度:b.length()endl;第1
14、5页/共70页162 2,从类模板派生一个类模板,从类模板派生一个类模板 类模板使用时,须指出类模板的参数类模板使用时,须指出类模板的参数给出类模板参数后得到一个模板类给出类模板参数后得到一个模板类继承后成员的访问权限变化同一般类的继承继承后成员的访问权限变化同一般类的继承第16页/共70页17class Point /非模板类protected:int x,y;public:Point(int a=0,int b=0):x(a),y(b)void showxy()coutx,yendl;template /从非模板类派生类模板class Line:public Point T x2,y2;p
15、ublic:Line(int a,int b,T c,T d):Point (a,b)x2=c;y2=d;void setline(int a,int b,T c,T d)x=a;y=b;x2=c;y2=d;void showLine()coutPoint1坐标:;showxy();coutPoint2坐标:;coutx2,y2endl;T length()return sqrt(x2-x)*(x2-x)+(y2-y)*(y2-y);template TTT/类模板/从类模板派生类模板void main()Point a(3.5,6.8);a.showxy();Lineab(4,5,6,7);
16、ab.showLine();coutab线段长度:ab.length()endl;Lineac(1.5,2.5,4.5,6.5);ac.showLine();coutac线段长度:ac.length()endl;第17页/共70页18类模板总结类模板的定义格式类模板的成员函数定义在类体外时注意事项类模板如何产生一个模板类并定义对象类模板与函数模板不同之处:类模板无法从构造函数的参数中判断出T的类型,必须显式给出模板的参数。类模板的派生类模板继承普通类,类模板派生类模板第18页/共70页19课程回顾课程回顾1.如果一个模板声明列出多个参数,则多个参数之间必须使用逗号隔开,每个参数都必须重复使用关
17、键字_ _。classs第19页/共70页20数组:数组:用于存放用于存放相同类型相同类型的数据;的数据;通过通过数组元素数组元素使用;使用;数组一旦定义,其大小即固定不变;数组一旦定义,其大小即固定不变;可使用泛型算法。可使用泛型算法。7.27.2向量与泛型算法向量与泛型算法 向量是向量是C+C+中一维数组的类版本,它与数组相似,其中的中一维数组的类版本,它与数组相似,其中的元素是连续存储元素是连续存储的,不的,不同的是:向量中存储元素的多少可以在运行中同的是:向量中存储元素的多少可以在运行中根据需要动态地增长或缩小根据需要动态地增长或缩小。向量:向量:用于存放多个用于存放多个相同类型相同类
18、型的数据;的数据;利用利用对象对象使用;使用;可可动态动态指定向量中元素的个数;指定向量中元素的个数;提供了多个提供了多个成员函数成员函数以方便数据使用;以方便数据使用;可使用泛型算法。可使用泛型算法。第20页/共70页21一、定义向量列表一、定义向量列表是是C+C+中的类模板。使用时加头文件中的类模板。使用时加头文件vectorvector。向量的声明形式:向量的声明形式:(以下形式中(以下形式中lengthlength表示长度,表示长度,typetype表示类型,表示类型,namename表示向量对象名)表示向量对象名)1 1)vector namevector name;/定义定义typ
19、etype的向量空表,没有元素的向量空表,没有元素2 2)vector name(length)vector name(length);/定义具有定义具有lenghlengh个个typetype的向量的向量,元素初始化为元素初始化为0 03 3)vector name(length,n)vector name(length,n);/定义具有定义具有lenghlengh个个typetype的向量的向量,元素初始化为元素初始化为n n4 4)vector name(name1)vector name(name1);/使用已定义的向量使用已定义的向量name1name1构造向量构造向量namenam
20、e5 5)vector name(a,a+vector name(a,a+长度长度);/将已经定义好的数组将已经定义好的数组a a的内容复制给向量的内容复制给向量第21页/共70页22向量的定义形式:向量的定义形式:1 1)vector namevector name;2 2)vector name(length)vector name(length);3 3)vector name(length,n)vector name(length,n);4 4)vector name(name1)vector name(name1);5 5)vector name(a,a+length)vector
21、name(a,a+length);例题:1)定义字符型空向量A2)定义5个int型向量B,元素初始化为03)定义10个int型向量C,元素初始化为3vectorA;vectorB(5);vectorC(10,3);4)用向量C构造向量DvectorD(C);5)定义5个字符型向量E,并初始化为aD=BvectorE(5,a);6)将B赋值给D同类型的向量可以相互赋值,而不管它们的长度如何。向量可以改变赋值目标的大小,使它的元素数目与赋值源的元素数目相同。第22页/共70页23向量的定义形式:向量的定义形式:1 1)vector namevector name;2 2)vector name(l
22、ength)vector name(length);3 3)vector name(length,n)vector name(length,n);4 4)vector name(name1)vector name(name1);5 5)vector name(a,a+length)vector name(a,a+length);例题:7)若已有数组定义如下:int a5=1,2,3,4,5;则:把数组中的全部元素复制到向量F中vectorF(a,a+5);第23页/共70页24向量的声明形式:第24页/共70页25向量的使用:由由vectorvector定义的对象定义的对象C+C+中称为向量中
23、称为向量同类型向量可相互赋值,不同类型不可相互赋值同类型向量可相互赋值,不同类型不可相互赋值同类向量长度不同也可相互赋值同类向量长度不同也可相互赋值向量中的元素使用类似数组元素向量中的元素使用类似数组元素,可使用可使用向量名向量名 下标下标 向量具有成员函数向量具有成员函数size()size()可得到向量长度可得到向量长度第25页/共70页26例题:补全程序并分析程序结果(lt7_6a.cpp)#include#include using namespace std;void main()int a=1,2,3,4,5;vectorF(a,a+3);cout有F.size()个元素,分别为:
24、endl;for(int i=0;iF.size();i+)coutFi;coutendl;向量具有成员函数向量具有成员函数sizesize()()可得到向量长度可得到向量长度向量中的元素使用类似向量中的元素使用类似数组元素,可使用向量数组元素,可使用向量名名 下标下标 的形式的形式第26页/共70页27向量的使用(分析以下程序段得结果)第27页/共70页28二、泛型指针二、泛型指针二、泛型指针二、泛型指针与操作对象的数据类型相互独立的算法称为 。泛型算法1 1、向量成员函数、向量成员函数begin()begin(),end()end(),rbegin()rbegin(),rend()rend
25、()其含义为其含义为:begin()begin()表示向量中首元素的地址表示向量中首元素的地址end()end()表示最后一个元素的下一个地址表示最后一个元素的下一个地址rbegin()rbegin()表示向量中最后一个元素的地址表示向量中最后一个元素的地址rend()rend()表示首元素的前一个地址表示首元素的前一个地址若有:若有:int x=1,2,3,4,5;vector a(x,x+5)int x=1,2,3,4,5;vector a(x,x+5);12345a.begin()a.end()a.rbegin()a.rend()第28页/共70页29特别注意向量的成员函数begin()
26、+1 表示下一个地址end()-1 表示前一个地址rbegin()+1 表示前一个地址rend()-1 表示下一个地址第29页/共70页30例题:用begin(),end(),rbegin(),rend()函数输出向量元素。(lt7_6b.c),按要求填空#include#include using namespace std;void main()int a=1,2,3,4,5;vectorF(a,a+5);cout向量F有 F.size()个元素,分别为:endl;for(int i=0;i F.size();i+)/正向输出向量中的元素 cout*(F.begin()+i);couten
27、dl;输出向量元素的个数第30页/共70页31若有向量定义:vector F(a,a+5)for(int i=0;i F.size();i+)/正向输出向量中的元素 cout*(F.begin()+i);coutendlfor(int i=0;i F.size();i+)/正向输出向量中的元素 cout*(F.rend()-i-1);coutendlfor(int i=0;i F.size();i+)/逆向输出向量中的元素 cout*(F.end()-1-i);coutendlfor(int i=0;i F.size();i+)/逆向输出向量中的元素 cout*(F.rbegin()+i);c
28、outendl第31页/共70页322、利用普通指针指向向量元素向量成员函数向量成员函数begin(),end(),rbegin(),rend()begin(),end(),rbegin(),rend()可以取得向量中某个元素地址可以取得向量中某个元素地址指针可以存放地址指针可以存放地址用指针可以指向向量中的元素注意:指针类型必须同要指向的数据类型一致注意:指针类型必须同要指向的数据类型一致如有:如有:vector v(10,1);vector v(10,1);int*p;int*p;则:则:p=v.begin();p=v.begin();/指针指针p p指向了指向了v v中的首元素中的首元素
29、若使p指向尾元素可使用语句:p=v.end()-1;注意:只能用正向指针来赋值,而不能用逆向指针赋值。如:p=v.rbegin()或者 p=rend()都是错误的。第32页/共70页33例题:用普通指针输出向量元素(lt7_6c.cpp)若有向量定义:int a=1,2,3,4,5;vector v(a,a+5);int*p;for(p=v.begin();pv.end();p+)/正向输出向量中的元素 cout*p ;cout=v.begin();p-)/逆向输出向量中的元素 cout*p ;coutendl;第33页/共70页343、泛型指针类模板类模板vectorvector中提供了一个
30、通用指针中提供了一个通用指针iteratoriterator,如果用如果用T T表示向量的参数化数据类型,表示向量的参数化数据类型,iteratoriterator相当于相当于T*T*。注意:泛型指针是使用注意:泛型指针是使用类类实现的实现的 该指针可指向向量中的元素该指针可指向向量中的元素 可使用可使用*p p表示它指向的元素值表示它指向的元素值 只能用只能用正向正向指针给指针给p p赋值,如赋值,如beginbegin()、()、endend()。()。1 1)用)用iteratoriterator声明声明正向正向泛型指针的形式:泛型指针的形式:vector:iterator vector
31、:iterator 指针名指针名例如:vector:iterator p;表示定义了一个指向int型向量的指针p第34页/共70页35用用iteratoriterator声明声明正向正向泛型指针的形式:泛型指针的形式:vector:iterator vector:iterator 指针名指针名例题:如有向量定义vector v(5,9);则:定义一个可以指向向量v的指针p应使用语句:vector:iterator p;使p指向向量v的首元素,可使用语句:p=v.begin();for(int i=0;iv.size();i+)/正向输出向量中的元素 cout *(p+i)=v.begin;p-
32、)/逆向输出向量中的元素 cout *p ;第35页/共70页36练习:补全程序并分析运行结果(lt7_6d.cpp)#include#include#includeusing namespace std;void main()char s=happy;vectorv(s,s+strlen(s);vector:iterator p;/定义一个指向v的向量指针p p=v.begin();for(int i=0;iv.size();i+)cout*(p+i);cout=v.begin();p-)cout*p;coutendl;第36页/共70页371 1)对向量的访问可以是双向的。)对向量的访问可
33、以是双向的。用用reverse_iteratorreverse_iterator声明声明逆向逆向泛型指针的形式:泛型指针的形式:vector:reverse_iterator vector:reverse_iterator 指针名指针名注意:如此定义的指针只能由逆向指针注意:如此定义的指针只能由逆向指针rbegin()rbegin()和和rend()rend()赋值赋值.第37页/共70页38例题:分析如下程序的运行结果(lt7_6d2.cpp)#include#include#includeusing namespace std;void main()char s=happy;vectorv
34、(s,s+strlen(s);vector:reverse_iterator p;cout正向字符串:=v.rbegin();p-)cout*p;coutendl;cout逆向字符串:endl;for(p=v.rbegin();p=v.rend();p+)cout*p;coutendl;第38页/共70页39特别注意(总结)向量不是数组!向量名不是数组名,不表示地址!也不可使用&取向量元素的首地址!int*p;vector c;p=c;p=&c;不可使用如此形式!第39页/共70页40特别注意(总结)向量的成员函数begin()+1,表示下一个地址end()-1表示前一个地址rbegin()+
35、1表示前一个地址rend()-1表示下一个地址第40页/共70页41特别注意:(总结)(总结)普通指针变量和iterator 指针变量(如int*p;或者 vector:iterator p;)只能被赋值为begin(),end()p=c.begin()正确p=c.end()正确p=c.rbegin()此形式错误!p=c.rend()此形式错误!第41页/共70页42特别注意:(总结)(总结)逆向泛型指针变量如(如vector:reverse_iterator p;)只能被赋值为rbegin(),rend()p=c.rbegin()正确p=c.rend()正确p=c.begin()此形式错误!
36、p=c.end()此形式错误!第42页/共70页43 1、数组内容反转 reverse(a,a+Len)2、1)复制数组的内容 copy(a,a+Len,b)2)反向复制数组的内容 reverse_copy(a,a+Len,b)3、将数组内容按升序排序 sort(a,a+Len)4、1)正向输出数组的内容copy(a,a+Len,ostream_iterator(cout,”字符串”)回顾常用的泛型算法:三、向量的数据类型第43页/共70页444、2)反向输出数组的内容reverse_copy(a,a+Len,ostream_iterator(cout,”字符串”)注:以上几个函数:rever
37、se、copy、reverse_copy、sort以及copy和reverse_copy用于屏幕输出在使用时,应加对应的头文件 。即在程序头使用:#include 第44页/共70页455、将数组内容按降序排序 sort(a,a+Len,greater()6、查找数组内容 find(a,a+Len,value)注:使用以上两个函数时还需要加对应的头文件 。即在程序头使用:#include#include 第45页/共70页46三、向量的数据类型向量不仅可以存取向量不仅可以存取intint,doubledouble等普通数据类型,也可等普通数据类型,也可存储对象存储对象,结构体、指针等结构体、指
38、针等第46页/共70页47综合练习综合练习#include/综合实例lt7_7a.cpp#include#include#include using namespace std;void main()int a=1,4,3,2;vectorva(a,a+4),vb(4);copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;reverse_copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;copy(va.begin(),va.end(),vb.begin();copy
39、(vb.begin(),vb.end(),ostream_iterator(cout,);coutendl;sort(va.begin(),va.end();copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;reverse_copy(va.begin(),va.end(),vb.begin();copy(vb.begin(),vb.end(),ostream_iterator(cout,);coutendl;sort(va.begin(),va.end(),greater();copy(va.begin(),va.end(),o
40、stream_iterator(cout,);coutendl;第47页/共70页48void main()int a=1,4,3,2;vectorva(a,a+4),vb(4);copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;reverse_copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;copy(va.begin(),va.end(),vb.begin();copy(vb.begin(),vb.end(),ostream_iterator(cout,);c
41、outendl;sort(va.begin(),va.end();copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;reverse_copy(va.begin(),va.end(),vb.begin();copy(vb.begin(),vb.end(),ostream_iterator(cout,);coutendl;sort(va.begin(),va.end(),greater();copy(va.begin(),va.end(),ostream_iterator(cout,);coutendl;1 4 3 22 3 4 1
42、1 2 3 44 3 2 14 3 2 11 4 3 2第48页/共70页49例题:使用结构做为向量元素(lt7_8a.cpp)#include#include using namespace std;struct struint a;double b;x=1,2.2,3,4.4;void main()vectorvs(2);/结构指针作为向量的数据类型 for(int i=0;i2;i+)vsi=ξfor(i=0;i2;i+)couta=a,b=bendl;第49页/共70页50例题:使用复数类作为向量元素(lt7_8b.cpp)#include#include#include usi
43、ng namespace std;void main()complexn=complex(2.5,3.5),complex(3.5,4.5);vectorcomplex*v(2);for(int i=0;i2;i+)vi=∋for(i=0;i2;i+)cout实部:real(),虚部:imag()endl;第50页/共70页51例题:类作为向量元素(lt7_8c.app)#include#include#include using namespace std;class personstring name;char sex;int age;public:person(string s=未
44、命名,char c=X,int n=0)name=s;sex=c;age=n;void set(string s,char c,int n)name=s;sex=c;age=n;void show()cout姓名:namet性别:“sext年龄ageendl;void main()vectorper(3);per0.set(张三,F,30);per1.set(李四,M,40);per2.set(王五,M,35);for(int i=0;i3;i+)peri.show();第51页/共70页521 1、访问向量容量信息的方法、访问向量容量信息的方法size(),max_size(),capaci
45、ty(),empty()size(),max_size(),capacity(),empty()用于得到当前向量的大小信息用于得到当前向量的大小信息四、向量最基本的操作方法四、向量最基本的操作方法四、向量最基本的操作方法四、向量最基本的操作方法向量有许多成员函数提供不同的操作。1)size():返回当前向量中已经存放的对象的个数。2)max_size():返回向量可以容纳的最多对象的个数。3)capacity():返回无需再次分配内存就能容纳的对象的个数。当存放空间已满,又增加一个元素时,它在原来的基础上自动翻倍扩充空间,以便存放更多的元素。4)empty():测试向量是否为空,为空时返回tr
46、ue。第52页/共70页53例题(lt7_9a.cpp)#include#include using namespace std;void main()coutsize:tmax_sizetcapatempty:endl;vectorv0;coutv0.size()tv0.max_size()t“v0.capacity()tv0.empty()endl;vectorv1(5);coutv1.size()tv1.max_size()t“v1.capacity()tv1.empty()endl;vectorv2(3,5);coutv2.size()tv2.max_size()t“v2.capaci
47、ty()tv2.empty()endl;v2=v1;coutv2.size()tv2.max_size()t“v2.capacity()tv2.empty()endl;第53页/共70页542、访问向量中对象的方法1)front():返回向量中的第一个元素2)back():返回向量中的最后一个元素3)operator(n):返回向量中下标为n的元素第54页/共70页55例题:分析以下程序的运行结果(lt7_9.cpp)#include#include using namespace std;void main()char s=abcdef;vectorvs(s,s+strlen(s);cout
48、first is:vs.front()endl;coutlast is:vs.back()endl;for(int i=0;ivs.size();i+)coutvs.operator(i);coutendl;第55页/共70页563、在向量中插入对象的方法1)push_back(const T&):在尾部插入一个元素2)insert(iterator it,const T&):在it所指的向量位置前插入一个元素3)insert(iterator it,size_type n,const T&X):在it所指的向量位置前插入n个值为X的元素第56页/共70页57例题(lt7_10a.cpp)cl
49、ass personstring name;char sex;int age;public:person()void set()void show()cout姓名:namet性别:sext年龄ageendl;void main()person per3=person(张三,F,30),person(李四,M,40),person(王五,M,35);vectorv(per,per+3);cout共有v.size()个人endl;cout可以存放v.capacity()个人endl;for(int i=0;iv.size();i+)vi.show();v.operator (i).show();第
50、57页/共70页58void main()coutthe last one is:;v.back().show();cout“新加一人!”endl;/尾部追加1人 v.push_back(person(赵六,M,18);cout共有v.size()个人endl;cout可以存放v.capacity()个人endl;coutthe last one is:;v.back().show();第58页/共70页59void main()cout“新插入2人!”endl;/新插入2人 v.insert(v.begin()+2,2,person(赵六,M,18);cout共有v.size()个人endl