第七章類模板與向量_第1頁
第七章類模板與向量_第2頁
第七章類模板與向量_第3頁
第七章類模板與向量_第4頁
第七章類模板與向量_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、1第七章類模板與向量2第七章類模板與向量第七章類模板與向量3相關知識回顧相關知識回顧1、函數(shù)的重載、函數(shù)的重載 函數(shù)重載可以使一個函數(shù)名具有多種功能,即具有多函數(shù)重載可以使一個函數(shù)名具有多種功能,即具有多種形態(tài),稱這種特性為種形態(tài),稱這種特性為 。多態(tài)性多態(tài)性 當函數(shù)的參數(shù)當函數(shù)的參數(shù) 不同,或者參數(shù)不同,或者參數(shù) 不同時,函數(shù)不同時,函數(shù)可以重載。僅有函數(shù)返回值不同可以重載。僅有函數(shù)返回值不同 區(qū)分重載函數(shù)。區(qū)分重載函數(shù)。類型類型個數(shù)個數(shù)不能不能42、函數(shù)模板、函數(shù)模板 c+規(guī)定模板以規(guī)定模板以 關鍵字和一個形參表開頭。關鍵字和一個形參表開頭。template 將函數(shù)模板與某個具體數(shù)據(jù)類型連

2、用,就產(chǎn)生將函數(shù)模板與某個具體數(shù)據(jù)類型連用,就產(chǎn)生了了 ,又稱這個過程為函數(shù)模板實例化,這種形式,又稱這個過程為函數(shù)模板實例化,這種形式就是類型參數(shù)化。就是類型參數(shù)化。模板函數(shù)模板函數(shù)5例如:例如:T max(T a, T b)if(ab) return a; else return b;template 另外,另外,c+還專門定義了一還專門定義了一個僅僅用在模板中的關鍵字個僅僅用在模板中的關鍵字 ,它的用途之一,它的用途之一是代替是代替template參數(shù)列表中參數(shù)列表中的關鍵字的關鍵字class。typename62、函數(shù)模板、函數(shù)模板 函數(shù)模板是不能直接執(zhí)行的,需要實例化為模板函數(shù)函數(shù)模

3、板是不能直接執(zhí)行的,需要實例化為模板函數(shù)后才能執(zhí)行。后才能執(zhí)行。使用格式:使用格式:模板函數(shù)名模板函數(shù)名 (實參表實參表) (顯式比較準則)(顯式比較準則)或者:或者:模板函數(shù)名模板函數(shù)名 (實參表實參表) (默認方式)(默認方式)7如有函數(shù)模板如下:如有函數(shù)模板如下: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);或者或者則對該函數(shù)模板的使用有:則對該函數(shù)模板的使用有:注:

4、要想省去顯式調(diào)用注:要想省去顯式調(diào)用的麻煩,條件是由這個的麻煩,條件是由這個調(diào)用的函數(shù)參數(shù)表能夠調(diào)用的函數(shù)參數(shù)表能夠惟一地去標識出模板參惟一地去標識出模板參數(shù)的一個集合。數(shù)的一個集合。 在調(diào)用函數(shù)模板時,在調(diào)用函數(shù)模板時, 的類型決定到底使用模的類型決定到底使用模板的哪個版本。也就是說,模板的參數(shù)是由板的哪個版本。也就是說,模板的參數(shù)是由 的參數(shù)的參數(shù)推斷出來的。推斷出來的。函數(shù)參數(shù)函數(shù)參數(shù)函數(shù)函數(shù)8class 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;voi

5、d 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()coutx,yendl;float getx()return x;float gety()return y;void main()PointInt a(3,4);a.showxy();PointFloat b(1.2,3.4);b.sh

6、owxy();分析以下程序的結(jié)果分析以下程序的結(jié)果(lt7_1a.cpp)9class 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

7、, float b)x=a;y=b; void showxy()coutx,yendl; float getx()return x; float gety()return y;分析以下程序的結(jié)果分析以下程序的結(jié)果(lt7_1a.cpp)分析分析PointInt類和類和PointFloat類的類的異同?異同?類中的數(shù)據(jù)成員類中的數(shù)據(jù)成員以及實現(xiàn)的操作以及實現(xiàn)的操作相同,只是相同,只是數(shù)據(jù)數(shù)據(jù)類型不同。類型不同。為了避免因為類的數(shù)據(jù)類為了避免因為類的數(shù)據(jù)類型不同而產(chǎn)生的重復性設型不同而產(chǎn)生的重復性設計,可以將這些數(shù)據(jù)類型計,可以將這些數(shù)據(jù)類型從類中分離出來形成一個從類中分離出來形成一個通用的數(shù)據(jù)類

8、型通用的數(shù)據(jù)類型T,為這,為這個數(shù)據(jù)類型個數(shù)據(jù)類型T設計一個操設計一個操作集,就是作集,就是類模板類模板 T TT T T T TTTTTTTT10將數(shù)據(jù)類型抽象出來而形成的操作集:將數(shù)據(jù)類型抽象出來而形成的操作集: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;117.17.1類模板類模板 類模板使用戶可以為類定義一種模式,使得類中類模板使用戶可以為類定義一種模式,使

9、得類中的某些數(shù)據(jù)成員、成員函數(shù)的參數(shù)和返回值能取得任的某些數(shù)據(jù)成員、成員函數(shù)的參數(shù)和返回值能取得任意數(shù)據(jù)類型。意數(shù)據(jù)類型。 類模板用于實現(xiàn)類所需數(shù)據(jù)的類模板用于實現(xiàn)類所需數(shù)據(jù)的類型參數(shù)化類型參數(shù)化。所以。所以類模板也稱為參數(shù)化類類模板也稱為參數(shù)化類。12一、類模板基礎知識一、類模板基礎知識1、類模板聲明的一般格式:、類模板聲明的一般格式:template class 類名類名 類體類體;例如:例如:13class 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() cout

10、x,yendl;T getx()return x;T gety()return y;template 模版以模版以template關關鍵字和一個形參表鍵字和一個形參表開頭。開頭。14void setxy (T a,T b)x=a;y=b;Point :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

11、;void setxy(T, T);template 注:在類體外面定義成員函注:在類體外面定義成員函數(shù)時,必須用數(shù)時,必須用template重寫重寫類模板聲明類模板聲明!15注:在類體外面定義成員函數(shù)時,必須用注:在類體外面定義成員函數(shù)時,必須用template重寫類重寫類模板聲明模板聲明!(P148)一般格式為:一般格式為:template 返回類型返回類型 類名類名:成員函數(shù)名成員函數(shù)名(函數(shù)參數(shù)列表函數(shù)參數(shù)列表)函數(shù)體函數(shù)體指指template的的內(nèi)使用內(nèi)使用class(或或typename)聲明的類型參數(shù)。聲明的類型參數(shù)。如上例中的:如上例中的:template void Point

12、:setxy (T a,T b)x=a;y=b;162 2、類模板對象、類模板對象 類模板不能直接使用,必須先實例化為相應的模類模板不能直接使用,必須先實例化為相應的模板類,定義該模板類的對象后才能使用。板類,定義該模板類的對象后才能使用。 初始化類模板時,只要傳給它指定的數(shù)據(jù)類型初始化類模板時,只要傳給它指定的數(shù)據(jù)類型(如如int,float,double等等),編譯器就用指定的類型代替編譯器就用指定的類型代替模板參數(shù)產(chǎn)生相應的模板參數(shù)產(chǎn)生相應的模板類模板類。17 用類模板定義對象的一般格式:用類模板定義對象的一般格式: 類名類名 對象名對象名(構(gòu)造函數(shù)實參列表構(gòu)造函數(shù)實參列表) 或者:或者

13、: 類名類名 對象名對象名 編譯器不能從構(gòu)造編譯器不能從構(gòu)造函數(shù)參數(shù)列表推斷函數(shù)參數(shù)列表推斷出模板實例化參數(shù)出模板實例化參數(shù)類型,所以類型,所以必須顯必須顯式地給出對象的參式地給出對象的參數(shù)類型數(shù)類型18例如:例如: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(

14、1.2,3.4); b.showxy();顯式地給顯式地給出對象的出對象的參數(shù)類型參數(shù)類型19例題:分析以下程序結(jié)果例題:分析以下程序結(jié)果(lt7_3.cpp)#include 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

15、.2,2.3,3.4,4.5); coutx.s()endl;couty.s()endl;coutz.s()endl;20#include using namespace std;template class sumT msize;public: sum(T a=0,T b=0,T c=0,T d=0) switch (size) case 4: m3=d; case 3: m2=c; case 2: m1=b; case 1: m0=a; T s() T add=0; for(int i=0;isize;i+)add+=mi; return add;void main()sum x(1,2,

16、3,4);sum y(a,1,-32);sum z(1.2,2.3,3.4,4.5); coutx.s()endl;couty.s()endl;coutz.s()endl;怎樣將怎樣將sumsum函數(shù)函數(shù)在類外定在類外定義?義?21#include using namespace std;template class sumT msize;public: sum(T a=0,T b=0,T c=0,T d=0); T s() T add=0; for(int i=0;isize;i+)add+=mi; return add;template sum:sum(T a, T b, T c,T d)

17、switch (size) case 4: m3=d; case 3: m2=c; case 2: m1=b; case 1: m0=a; 22 類模板也可以繼承。類模板也可以繼承。聲明模板繼承之前,必須聲明模板繼承之前,必須重重新聲明類模板新聲明類模板。模板類的基類和派生類都可以是模板。模板類的基類和派生類都可以是模板類或者非模板類,本節(jié)只介紹其中兩種情況:類或者非模板類,本節(jié)只介紹其中兩種情況:23class Point /非模板類非模板類protected:int x,y;public: Point( int a=0, int b=0):x(a),y(b) void showxy() c

18、outx,yendl;template /從非模板類派生類模板從非模板類派生類模板class Line: public Point T x2,y2;public: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);voi

19、d 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;2425class 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;pu

20、blic: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()

21、;Lineab(4,5,6,7);ab.showLine ();coutab線段長度線段長度: ab.length ()endl;Lineac(1.5,2.5,4.5,6.5);ac.showLine ();coutac線段長度線段長度: ac.length ()endl;26#include #include using namespace std;template class Point /非模板類protected:T x,y;public: Point( T a=0,T b=0):x(a),y(b) void showxy() coutx,yendl;template /從非模板類派生

22、類模板class Line:public Point T2 x2,y2;public:Line(T1 a,T1 b,T2 c,T2 d):Point(a,b)x2=c;y2=d;void setline(T1 a,T1 b,T2 c,T2 d)x=a;y=b;x2=c;y2=d;void showLine()coutPoint1坐標:;showxy();coutPoint2坐標:;coutx2,y2endl;T2 length()return sqrt(x2-x)*(x2-x)+(y2-y)*(y2-y);void main()Point a(3.5,6.8);a.showxy();Linea

23、b(4,5,6,7);ab.showLine ();coutab線段長度: ab.length ()endl;Lineac(1.5,2.5,4,6);ac.showLine ();coutac線段長度: ac.length ()endl;2728課程回顧課程回顧1.如果一個模板聲明列出多個參數(shù),則多個參數(shù)之間如果一個模板聲明列出多個參數(shù),則多個參數(shù)之間必須使用逗號隔開,每個參數(shù)都必須重復使用關鍵必須使用逗號隔開,每個參數(shù)都必須重復使用關鍵字字_ _。class297.27.2向量與泛型算法向量與泛型算法30313233例題:例題:1)1)定義字符型空向量定義字符型空向量A AvectorA;2

24、)2)定義定義5 5個個intint型向量型向量B,B,元素初始化為元素初始化為0 0 vectorB(5);34例題:例題:3)定義定義10個個int型向量型向量C,元素初始化為元素初始化為3vectorC(10,3);35例題:例題:4)用向量用向量C構(gòu)造向量構(gòu)造向量DvectorD(C);36例題:例題:5)定義定義5個字符型向量個字符型向量E,并初始化為并初始化為avectorE(5,a);37D=B例題:例題:6)將將B賦值給賦值給D同類型的向量可以相互賦值,而不管它們的長度如何。同類型的向量可以相互賦值,而不管它們的長度如何。向量可以改變賦值目標的大小,使它的元素數(shù)目與賦值向量可以

25、改變賦值目標的大小,使它的元素數(shù)目與賦值源的元素數(shù)目相同。源的元素數(shù)目相同。38例題:例題:7)若已有數(shù)組定義如下:若已有數(shù)組定義如下: int a5=1,2,3,4,5; 則:把數(shù)組中的全部元素復制到向量則:把數(shù)組中的全部元素復制到向量F中中vectorF(a,a+5);3940例題:補全程序并分析程序結(jié)果例題:補全程序并分析程序結(jié)果(lt7_6a.cpp)#include #include using namespace std;void main()int a=1,2,3,4,5; vectorF(a,a+3); cout有有F.size()個元素,分別為:個元素,分別為:endl; f

26、or(int i=0;iF.size();i+) coutFi ; coutendl;向量具有成員函數(shù)向量具有成員函數(shù)sizesize()可得到向()可得到向量長度量長度向量中的元素使向量中的元素使用類似數(shù)組元素,用類似數(shù)組元素,可使用向量名可使用向量名下標下標的形式的形式4142二、泛型指針二、泛型指針與操作對象的數(shù)據(jù)類型相互獨立的算法稱為與操作對象的數(shù)據(jù)類型相互獨立的算法稱為 。泛型算法泛型算法12345a.begin()a.end()a.rbegin()a.rend()4344例題:用例題:用begin(),end(),rbegin(),rend()函數(shù)輸出向量元素。函數(shù)輸出向量元素。(

27、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) ; coutendl;輸出向量元輸出向量元素的個數(shù)素的個數(shù)45若有向量定義:若有向量定義:vector F(a,a+5)for(int i=0;i F.size() ;

28、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) ; coutendl46

29、用指針可以指向用指針可以指向向量中的元素向量中的元素若使若使p指向尾元素可使用語句:指向尾元素可使用語句:p=v.end()-1;注意:只能用正向指針來賦值,而不能用逆向指針賦值。注意:只能用正向指針來賦值,而不能用逆向指針賦值。如如:p=v.rbegin() 或者或者 p=rend()都是錯誤的。都是錯誤的。47例題:用普通指針輸出向量元素例題:用普通指針輸出向量元素(lt7_6c.cpp)若有向量定義:若有向量定義:int a=1,2,3,4,5; vector v(a,a+5); int *p; for( p=v.begin() ; pv.end(); p+) /正向輸出向量中的元素正向

30、輸出向量中的元素 cout *p ; cout=v.begin() ; p- ) /逆向輸出向量中的元素逆向輸出向量中的元素 cout *p ; coutendl; 48。例如:例如:vector:iterator p; 表示定義了一個指向表示定義了一個指向int型向量的指針型向量的指針p4950例題:如有向量定義例題:如有向量定義vector v(5,9 ); 則:則:定義一個可以指向向量定義一個可以指向向量v的指針的指針p應使用語句:應使用語句:vector:iterator p;使使p指向向量指向向量v的首元素,可使用語句:的首元素,可使用語句:p=v.begin(); for( int

31、 i=0 ; iv.size();i+) /正向輸出向量中的元素正向輸出向量中的元素 cout *( p+i) =v.begin ; p- - ) /逆向輸出向量中的元素逆向輸出向量中的元素 cout *p ;51練習:補全程序并分析運行結(jié)果練習:補全程序并分析運行結(jié)果(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(); fo

32、r(int i=0;iv.size();i+) cout*(p+i); cout=v.begin ();p-) cout*p; coutendl;5253例題:分析如下程序的運行結(jié)果例題:分析如下程序的運行結(jié)果(lt7_6d2.cpp)#include#include #includeusing namespace std;void main()char s=happy; vectorv(s,s+strlen(s); vector:reverse_iterator p; cout正向字符串正向字符串:=v.rbegin();p- - ) cout*p; coutendl; cout逆向字符串逆

33、向字符串:endl; for(p=v.rbegin();p=v.rend ();p+ ) cout*p; coutendl; 5455565758 1、數(shù)組內(nèi)容反轉(zhuǎn)、數(shù)組內(nèi)容反轉(zhuǎn) reverse(a,a+Len)2、1)復制數(shù)組的內(nèi)容復制數(shù)組的內(nèi)容 copy(a,a+Len,b)2)反向復制數(shù)組的內(nèi)容反向復制數(shù)組的內(nèi)容 reverse_copy(a,a+Len,b)回顧常用的泛型算法:回顧常用的泛型算法:593、將數(shù)組內(nèi)容按升序排序、將數(shù)組內(nèi)容按升序排序 sort(a,a+Len)4、1)正向輸出數(shù)組的內(nèi)容)正向輸出數(shù)組的內(nèi)容copy(a,a+Len,ostream_iterator(cout

34、,”字符串字符串”)604、2)反向輸出數(shù)組的內(nèi)容)反向輸出數(shù)組的內(nèi)容reverse_copy(a,a+Len,ostream_iterator(cout,”字符串字符串”)注注:以上幾個函數(shù):以上幾個函數(shù):reverse、copy、reverse_copy、sort以及以及copy和和reverse_copy用用于屏幕輸出在使用時,應加對應的頭文于屏幕輸出在使用時,應加對應的頭文件件 。即在程序頭使用:即在程序頭使用: #include 615、將數(shù)組內(nèi)容按、將數(shù)組內(nèi)容按降序降序排序排序 sort(a,a+Len,greater()6、查找數(shù)組內(nèi)容、查找數(shù)組內(nèi)容 find(a,a+Len,v

35、alue)注:使用以上兩個函數(shù)時還需要加對應的頭文件注:使用以上兩個函數(shù)時還需要加對應的頭文件 。即在程序頭使用:即在程序頭使用: #include #include 6263綜合練習#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(),v

36、a.end(),ostream_iterator(cout, );coutendl;copy(va.begin(),va.end(),vb.begin(); copy(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

37、_iterator(cout, );coutendl;sort(va.begin(),va.end(),greater();copy(va.begin(),va.end(),ostream_iterator(cout, );coutendl;64void 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;co

38、py(va.begin(),va.end(),vb.begin();copy(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.

39、end(),greater();copy(va.begin(),va.end(),ostream_iterator(cout, );coutendl;1 4 3 22 3 4 11 2 3 44 3 2 14 3 2 11 4 3 265例題:使用結(jié)構(gòu)做為向量元素(例題:使用結(jié)構(gòu)做為向量元素(lt7_8a.cpp)#include #include using namespace std;struct struint a; double b; x =1,2.2,3,4.4;void main()vectorvs(2); /結(jié)構(gòu)指針作為向量的數(shù)據(jù)類型結(jié)構(gòu)指針作為向量的數(shù)據(jù)類型 for(int i

40、=0;i2;i+) vsi=ξ for( i=0;i2;i+) couta=a,b=bendl;66例題:使用復數(shù)類作為向量元素例題:使用復數(shù)類作為向量元素(lt7_8b.cpp)#include #include #include using 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;

41、67例題:類作為向量元素例題:類作為向量元素(lt7_8c.app)#include #include #include using namespace std;class personstring name; char sex; int age;public: person(string s=未命名未命名,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 m

42、ain()vectorper(3); per0.set(張三張三,F,30); per1.set(李四李四,M,40); per2.set(王五王五,M,35); for(int i=0;i3;i+) peri.show();68向量有許多成員函數(shù)提供不同的操作。向量有許多成員函數(shù)提供不同的操作。1)size(): 返回當前向量中已經(jīng)存放的對象的個數(shù)。返回當前向量中已經(jīng)存放的對象的個數(shù)。2)max_size(): 返回向量可以容納的最多對象的個數(shù)。返回向量可以容納的最多對象的個數(shù)。693)capacity(): 返回無需再次分配內(nèi)存就能容納的對返回無需再次分配內(nèi)存就能容納的對象的個數(shù)。當存放空

43、間已滿,又增加一個元素時,它象的個數(shù)。當存放空間已滿,又增加一個元素時,它在原來的基礎上自動翻倍擴充空間,以便存放更多的在原來的基礎上自動翻倍擴充空間,以便存放更多的元素。元素。4)empty(): 測試向量是否為空,為空時返回測試向量是否為空,為空時返回true。70例題例題(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(

44、)endl; vectorv1(5); coutv1.size()tv1.max_size()t“ v1.capacity()tv1.empty()endl; vectorv2(3,5); coutv2.size()tv2.max_size()t“ v2.capacity()tv2.empty()endl; v2=v1; coutv2.size()tv2.max_size()t“ v2.capacity()tv2.empty()endl;712、訪問向量中對象的方法、訪問向量中對象的方法1)front():返回向量中的第一個元素返回向量中的第一個元素2)back():返回向量中的最后一個元素返

45、回向量中的最后一個元素3)operator(n):返回向量中下標為返回向量中下標為n的元素的元素72例題:分析以下程序的運行結(jié)果例題:分析以下程序的運行結(jié)果(lt7_9.cpp)#include #include using namespace std;void main()char s=abcdef;vectorvs(s,s+strlen(s);coutfirst is:vs.front() endl;coutlast is:vs.back() endl;for(int i=0;ivs.size();i+)coutvs.operator (i);coutendl;733、在向量中插入對象的方

46、法、在向量中插入對象的方法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的元素的元素74例題例題(lt7_10a.cpp)class personstring name; char sex; int age;public: person( ) void se

47、t( ) 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();75void main() coutthe last on

48、e 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();76void main() cout“新插入新插入2人!人!”endl; /新插入新插入2人人 v.insert(v.begin()+2,2,person(趙六趙六,M,18); cout共有共有v.size()個人個人endl; cout可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論