c程序設(shè)計(jì)類模板與向量ppt課件_第1頁
c程序設(shè)計(jì)類模板與向量ppt課件_第2頁
c程序設(shè)計(jì)類模板與向量ppt課件_第3頁
c程序設(shè)計(jì)類模板與向量ppt課件_第4頁
c程序設(shè)計(jì)類模板與向量ppt課件_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第七章類模板與向量第七章類模板與向量層次。對(duì)構(gòu)造類型普通性了解,到達(dá)層次。對(duì)構(gòu)造類型普通性了解,到達(dá)“識(shí)記層次。識(shí)記層次。8、掌握向量容器指定位置插入和刪除對(duì)象的方法,到達(dá)、掌握向量容器指定位置插入和刪除對(duì)象的方法,到達(dá)“簡(jiǎn)單運(yùn)用層次。簡(jiǎn)單運(yùn)用層次。9、了解向量其他的操作方法,到達(dá)、了解向量其他的操作方法,到達(dá)“識(shí)記層次。識(shí)記層次。相關(guān)知識(shí)回想相關(guān)知識(shí)回想1、函數(shù)的重載、函數(shù)的重載 函數(shù)重載可以使一個(gè)函數(shù)名具有多種功能,即具有多種形函數(shù)重載可以使一個(gè)函數(shù)名具有多種功能,即具有多種形狀,稱這種特性為狀,稱這種特性為 。多態(tài)性多態(tài)性 當(dāng)函數(shù)的參數(shù)當(dāng)函數(shù)的參數(shù) 不同,或者參數(shù)不同,或者參數(shù) 不同時(shí),

2、函數(shù)可以不同時(shí),函數(shù)可以重載。僅有函數(shù)前往值不同重載。僅有函數(shù)前往值不同 區(qū)分重載函數(shù)。區(qū)分重載函數(shù)。類型類型個(gè)數(shù)個(gè)數(shù)不能不能2、函數(shù)模板、函數(shù)模板 c+規(guī)定模板以規(guī)定模板以 關(guān)鍵字和一個(gè)形參表開頭。關(guān)鍵字和一個(gè)形參表開頭。template 將函數(shù)模板與某個(gè)詳細(xì)數(shù)據(jù)類型連用,就產(chǎn)生了將函數(shù)模板與某個(gè)詳細(xì)數(shù)據(jù)類型連用,就產(chǎn)生了 ,又稱這個(gè)過程為函數(shù)模板實(shí)例化,這種方式就是類型參數(shù)化。又稱這個(gè)過程為函數(shù)模板實(shí)例化,這種方式就是類型參數(shù)化。模板函數(shù)模板函數(shù)例如:例如:T max(T a, T b)if(ab) return a; else return b;template 另外,另外,c+還專門定

3、義了一還專門定義了一個(gè)僅僅用在模板中的關(guān)鍵字個(gè)僅僅用在模板中的關(guān)鍵字 ,它的用途之一,它的用途之一是替代是替代template參數(shù)列表中參數(shù)列表中的關(guān)鍵字的關(guān)鍵字class。typename2、函數(shù)模板、函數(shù)模板 函數(shù)模板是不能直接執(zhí)行的,需求實(shí)例化為模板函數(shù)后才函數(shù)模板是不能直接執(zhí)行的,需求實(shí)例化為模板函數(shù)后才干執(zhí)行。干執(zhí)行。運(yùn)用格式:運(yùn)用格式:模板函數(shù)名模板函數(shù)名 (實(shí)參表實(shí)參表) 顯式比較準(zhǔn)那么顯式比較準(zhǔn)那么或者:或者:模板函數(shù)名模板函數(shù)名 (實(shí)參表實(shí)參表) 默許方式默許方式如有函數(shù)模板如下:如有函數(shù)模板如下:template T max(T a,T b)if(ab) return a;

4、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);或者或者那么對(duì)該函數(shù)模板的運(yùn)用有:那么對(duì)該函數(shù)模板的運(yùn)用有:注:要想省去顯式調(diào)用的費(fèi)事,注:要想省去顯式調(diào)用的費(fèi)事,條件是由這個(gè)調(diào)用的函數(shù)參數(shù)條件是由這個(gè)調(diào)用的函數(shù)參數(shù)表可以獨(dú)一地去標(biāo)識(shí)出模板參表可以獨(dú)一地去標(biāo)識(shí)出模板參數(shù)的一個(gè)集合。數(shù)的一個(gè)集合。 在調(diào)用函數(shù)模板時(shí),在調(diào)用函數(shù)模板時(shí), 的類型決議究竟運(yùn)用模板的的類型決議究竟運(yùn)用模板的哪個(gè)版本。也就是說,模板的參數(shù)是由哪個(gè)版本。也就是說,模板的參數(shù)是由 的

5、參數(shù)推斷出來的參數(shù)推斷出來的。的。函數(shù)參數(shù)函數(shù)參數(shù)函數(shù)函數(shù)class 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

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

7、()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;分析以下程序的結(jié)果分析以下程序的結(jié)果(lt7_1a.cpp)分析分析PointInt類和類和PointFloat類的類的異同?異同?類中的數(shù)據(jù)成員類中的數(shù)據(jù)成員以及實(shí)現(xiàn)的操

8、作以及實(shí)現(xiàn)的操作一樣,只是數(shù)據(jù)一樣,只是數(shù)據(jù)類型不同。類型不同。為了防止由于類的數(shù)為了防止由于類的數(shù)據(jù)類型不同而產(chǎn)生的據(jù)類型不同而產(chǎn)生的反復(fù)性設(shè)計(jì),可以將反復(fù)性設(shè)計(jì),可以將這些數(shù)據(jù)類型從類中這些數(shù)據(jù)類型從類中分別出來構(gòu)成一個(gè)通分別出來構(gòu)成一個(gè)通用的數(shù)據(jù)類型用的數(shù)據(jù)類型T,為,為這個(gè)數(shù)據(jù)類型這個(gè)數(shù)據(jù)類型T設(shè)計(jì)設(shè)計(jì)一個(gè)操作集,就是類一個(gè)操作集,就是類模板模板 T TT T T T TTTTTTTT將數(shù)據(jù)類型籠統(tǒng)出來而構(gòu)成的操作集:將數(shù)據(jù)類型籠統(tǒng)出來而構(gòu)成的操作集:class PointT x,y;public:Point(T a=0,T b=0):x(a),y(b)void setxy(T a,T

9、 b)x=a;y=b;void showxy()coutx,yendl;T getx()return x;T gety()return y;7.17.1類模板類模板 類模板運(yùn)用戶可以為類定義一種方式,使得類中的某些數(shù)類模板運(yùn)用戶可以為類定義一種方式,使得類中的某些數(shù)據(jù)成員、成員函數(shù)的參數(shù)和前往值能獲得恣意數(shù)據(jù)類型。據(jù)成員、成員函數(shù)的參數(shù)和前往值能獲得恣意數(shù)據(jù)類型。 類模板用于實(shí)現(xiàn)類所需數(shù)據(jù)的類型參數(shù)化。所以類模板也類模板用于實(shí)現(xiàn)類所需數(shù)據(jù)的類型參數(shù)化。所以類模板也稱為參數(shù)化類。稱為參數(shù)化類。一、類模板根底知識(shí)一、類模板根底知識(shí)1、類模板聲明的普通格式:、類模板聲明的普通格式:template

10、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關(guān)關(guān)鍵字和一個(gè)形參表鍵字和一個(gè)形參表開頭。開頭。void 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),

11、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 注:在類體外面定義成員函注:在類體外面定義成員函數(shù)時(shí),必需用數(shù)時(shí),必需用template重寫重寫類模板聲明!類模板聲明!注:在類體外面定義成員函數(shù)時(shí),必需用注:在類體外面定義成員函數(shù)時(shí),必需用template重寫類模板重寫類模板聲明!聲明!(P148)普通格式為:普通格式為:template 前往類型前往類型

12、類名類名:成員函數(shù)名成員函數(shù)名(函數(shù)參數(shù)列表函數(shù)參數(shù)列表)函數(shù)體函數(shù)體指指template的的內(nèi)運(yùn)用內(nèi)運(yùn)用class(或或typename)聲明的類型參數(shù)。聲明的類型參數(shù)。如上例中的:如上例中的:template void Point:setxy (T a,T b)x=a;y=b;2 2、類模板對(duì)象、類模板對(duì)象 類模板不能直接運(yùn)用,必需先實(shí)例化為相應(yīng)的模板類,定類模板不能直接運(yùn)用,必需先實(shí)例化為相應(yīng)的模板類,定義該模板類的對(duì)象后才干運(yùn)用。義該模板類的對(duì)象后才干運(yùn)用。 初始化類模板時(shí),只需傳給它指定的數(shù)據(jù)類型初始化類模板時(shí),只需傳給它指定的數(shù)據(jù)類型(如如int,float,double等等),編

13、譯器就用指定的類型替代模板參數(shù)產(chǎn)生相應(yīng)的模編譯器就用指定的類型替代模板參數(shù)產(chǎn)生相應(yīng)的模板類。板類。 用類模板定義對(duì)象的普通格式:用類模板定義對(duì)象的普通格式: 類名類名 對(duì)象名對(duì)象名(構(gòu)造函數(shù)實(shí)參列表構(gòu)造函數(shù)實(shí)參列表) 或者:或者: 類名類名 對(duì)象名對(duì)象名 編譯器不能從構(gòu)造函編譯器不能從構(gòu)造函數(shù)參數(shù)列表推斷出模數(shù)參數(shù)列表推斷出模板實(shí)例化參數(shù)類型,板實(shí)例化參數(shù)類型,所以必需顯式地給出所以必需顯式地給出對(duì)象的參數(shù)類型對(duì)象的參數(shù)類型例如:例如:template class PointT x,y;public:Point(T a=0,T b=0):x(a),y(b)void setxy(T a,T b)

14、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();顯式地給顯式地給出對(duì)象的出對(duì)象的參數(shù)類型參數(shù)類型例題:分析以下程序結(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

15、=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; 類模板也可以承繼。聲明模板承繼之前,必需重新聲明類類模板也可以承繼。聲明模板承繼之前,必需重新聲明類模板。模板類的基類和派生類都可以是模板類或者非模板類,模板。模板類的基類和派生類都可以是模板類或者非模板類,本節(jié)只引見其中兩種情況:本節(jié)只引見其中兩種情況:cl

16、ass 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):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坐標(biāo)

17、坐標(biāo):;showxy();coutPoint2坐標(biāo)坐標(biāo):;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;class Point /非模板類非模板類protected:int x,y;public: Point( int a=0, int b=0):x(a),y(b)

18、 void showxy() coutx,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坐標(biāo)坐標(biāo):;showxy();coutPoint2坐標(biāo)坐標(biāo):;coutx2,y2endl;T length()return sqrt(x2-x)*(x2-x)+(

19、y2-y)*(y2-y);template TTT/類模板類模板/從類模板派生類模板從類模板派生類模板void main()Point a(3.5,6.8);a.showxy();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;課程回想課程回想1.假設(shè)一個(gè)模板聲明列出多個(gè)參數(shù),那么多個(gè)參數(shù)之間必需假設(shè)一個(gè)模板聲明列出多個(gè)參數(shù),那么多個(gè)參數(shù)之間必需運(yùn)用逗號(hào)隔開,每個(gè)參數(shù)都必需

20、反復(fù)運(yùn)用關(guān)鍵字運(yùn)用逗號(hào)隔開,每個(gè)參數(shù)都必需反復(fù)運(yùn)用關(guān)鍵字_ _。classs7.27.2向量與泛型算法向量與泛型算法例題:例題:1)定義字符型空向量定義字符型空向量A2)定義定義5個(gè)個(gè)int型向量型向量B,元素初始化為元素初始化為03)定義定義10個(gè)個(gè)int型向量型向量C,元素初始化為元素初始化為3vectorA;vectorB(5);vectorC(10,3);4)用向量用向量C構(gòu)造向量構(gòu)造向量DvectorD(C);5)定義定義5個(gè)字符型向量個(gè)字符型向量E,并初始化為并初始化為aD=BvectorE(5,a);6)將將B賦值給賦值給D同類型的向量可以相互賦值,而不論它們的長度如何。向量可以

21、同類型的向量可以相互賦值,而不論它們的長度如何。向量可以改動(dòng)賦值目的的大小,使它的元素?cái)?shù)目與賦值源的元素?cái)?shù)目一樣。改動(dòng)賦值目的的大小,使它的元素?cái)?shù)目與賦值源的元素?cái)?shù)目一樣。例題:例題:7)假設(shè)已有數(shù)組定義如下:假設(shè)已有數(shù)組定義如下: int a5=1,2,3,4,5; 那么:把數(shù)組中的全部元素復(fù)制到向量那么:把數(shù)組中的全部元素復(fù)制到向量F中中vectorF(a,a+5);例題:補(bǔ)全程序并分析程序結(jié)果例題:補(bǔ)全程序并分析程序結(jié)果(lt7_6a.cpp)#include #include using namespace std;void main()int a=1,2,3,4,5; vectorF

22、(a,a+3); cout有有F.size()個(gè)元素,分別為:個(gè)元素,分別為:endl; for(int i=0;iF.size();i+) coutFi ; coutendl;與操作對(duì)象的數(shù)據(jù)類型相互獨(dú)立的算法稱為與操作對(duì)象的數(shù)據(jù)類型相互獨(dú)立的算法稱為 。泛型算法泛型算法12345a.begin()a.end()a.rbegin()a.rend()例題:用例題:用begin(),end(),rbegin(),rend()函數(shù)輸出向量元素。函數(shù)輸出向量元素。(lt7_6b.c),按要求填空,按要求填空#include #include using namespace std;void main

23、()int a=1,2,3,4,5; vectorF(a,a+5); cout向量向量F有有 F.size() 個(gè)元素,分別為:個(gè)元素,分別為:endl; for(int i=0;i F.size() ;i+) /正向輸出向量中的元素正向輸出向量中的元素 cout *(F.begin()+i) ; coutendl;輸出向量元輸出向量元素的個(gè)數(shù)素的個(gè)數(shù)假設(shè)有向量定義:假設(shè)有向量定義:vector F(a,a+5)for(int i=0;i F.size() ;i+) /正向輸出向量中的元素正向輸出向量中的元素 cout *(F.begin()+i) ; coutendlfor(int i=0;

24、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) ; coutendl用指針可以指向用指針可以指向向量中的元素向量中的元素假設(shè)使假設(shè)使p指向尾元素可運(yùn)用語句:指向尾元素可運(yùn)用語句:p=v.end()-1;留意:

25、只能用正向指針來賦值,而不能用逆向指針賦值。留意:只能用正向指針來賦值,而不能用逆向指針賦值。如如:p=v.rbegin() 或者或者 p=rend()都是錯(cuò)誤的。都是錯(cuò)誤的。例題:用普通指針輸出向量元素例題:用普通指針輸出向量元素(lt7_6c.cpp)假設(shè)有向量定義:假設(shè)有向量定義: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

26、*p ; coutendl; 例如:例如:vector:iterator p; 表示定義了一個(gè)指向表示定義了一個(gè)指向int型向量的指針型向量的指針p例題:如有向量定義例題:如有向量定義vector v(5,9 ); 那么:那么:定義一個(gè)可以指向向量定義一個(gè)可以指向向量v的指針的指針p應(yīng)運(yùn)用語句:應(yīng)運(yùn)用語句:vector:iterator p;使使p指向向量指向向量v的首元素,可運(yùn)用語句:的首元素,可運(yùn)用語句:p=v.begin(); for( int i=0 ; iv.size();i+) /正向輸出向量中的元素正向輸出向量中的元素 cout *( p+i) =v.begin ; p- - )

27、 /逆向輸出向量中的逆向輸出向量中的元素元素 cout *p ;練習(xí):補(bǔ)全程序并分析運(yùn)轉(zhuǎn)結(jié)果練習(xí):補(bǔ)全程序并分析運(yùn)轉(zhuǎn)結(jié)果(lt7_6d.cpp)#include#include #includeusing namespace std;void main()char s=happy; vectorv(s,s+strlen(s); vector:iterator p; /定義一個(gè)指向定義一個(gè)指向v的向量指針的向量指針p p=v.begin(); for(int i=0;iv.size();i+) cout*(p+i); cout=v.begin ();p-) cout*p; coutendl;例題

28、:分析如下程序的運(yùn)轉(zhuǎn)結(jié)果例題:分析如下程序的運(yùn)轉(zhuǎn)結(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逆向字符串逆向字符串:endl; for(p=v.rbegin();p=v.rend ();p+ ) cout*p; coutendl; 1、數(shù)組內(nèi)容反轉(zhuǎn)、數(shù)組內(nèi)容反轉(zhuǎn)

29、reverse(a,a+Len)2、1)復(fù)制數(shù)組的內(nèi)容復(fù)制數(shù)組的內(nèi)容 copy(a,a+Len,b)2)反向復(fù)制數(shù)組的內(nèi)容反向復(fù)制數(shù)組的內(nèi)容 reverse_copy(a,a+Len,b)3、將數(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,字符串字符串)回想常用的泛型算法:回想常用的泛型算法:4、2反向輸出數(shù)組的內(nèi)容反向輸出數(shù)組的內(nèi)容reverse_copy(a,a+Len,ostream_iterator(cout,字符串字符串)注:以上幾個(gè)函數(shù):注:以上幾個(gè)

30、函數(shù):reverse、copy、reverse_copy、sort以及以及copy和和reverse_copy用于屏幕輸出在運(yùn)用時(shí),用于屏幕輸出在運(yùn)用時(shí),應(yīng)加對(duì)應(yīng)的頭文件應(yīng)加對(duì)應(yīng)的頭文件 。即在程序頭運(yùn)用:即在程序頭運(yùn)用: #include 5、將數(shù)組內(nèi)容按降序排序、將數(shù)組內(nèi)容按降序排序 sort(a,a+Len,greater()6、查找數(shù)組內(nèi)容、查找數(shù)組內(nèi)容 find(a,a+Len,value)注:運(yùn)用以上兩個(gè)函數(shù)時(shí)還需求加對(duì)應(yīng)的頭文件注:運(yùn)用以上兩個(gè)函數(shù)時(shí)還需求加對(duì)應(yīng)的頭文件 。即在程序頭運(yùn)用:即在程序頭運(yùn)用: #include #include 綜合練習(xí)綜合練習(xí)#include /綜

31、合實(shí)例綜合實(shí)例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(vb.begin(),vb.end()

32、,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(),ostream_iterator

33、(cout, );coutendl;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(vb.begin(),vb.end(),ostream_iterator(cout, );coutendl;sort(va.begi

34、n (),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 11 2 3 44 3 2 14

35、3 2 11 4 3 2例題:運(yùn)用構(gòu)造做為向量元素例題:運(yùn)用構(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); /構(gòu)造指針作為向量的數(shù)據(jù)類型構(gòu)造指針作為向量的數(shù)據(jù)類型 for(int i=0;i2;i+) vsi=ξ for( i=0;i2;i+) couta=a,b=bendl;例題:運(yùn)用復(fù)數(shù)類作為向量元素例題:運(yùn)用復(fù)數(shù)類作為向量元素(lt7_8b.cpp)#include #inclu

36、de #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實(shí)部實(shí)部:real() ,虛部虛部:imag()endl;例題:類作為向量元素例題:類作為向量元素(lt7_8c.app)#include #include #include using namespace std;class personstring name; char sex

37、; 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 main()vectorper(3); per0.set(張三張三,F,30); per1.set(李四李四,M,40); per2.set(王五王五,M,35); for(int i=0;i3;i+) peri.show();向

38、量有許多成員函數(shù)提供不同的操作。向量有許多成員函數(shù)提供不同的操作。1size(): 前往當(dāng)前向量中曾經(jīng)存放的對(duì)象的個(gè)數(shù)。前往當(dāng)前向量中曾經(jīng)存放的對(duì)象的個(gè)數(shù)。2max_size(): 前往向量可以包容的最多對(duì)象的個(gè)數(shù)。前往向量可以包容的最多對(duì)象的個(gè)數(shù)。3capacity(): 前往無需再次分配內(nèi)存就能包容的對(duì)象的個(gè)前往無需再次分配內(nèi)存就能包容的對(duì)象的個(gè)數(shù)。當(dāng)存放空間已滿,又添加一個(gè)元素時(shí),它在原來的根底數(shù)。當(dāng)存放空間已滿,又添加一個(gè)元素時(shí),它在原來的根底上自動(dòng)翻倍擴(kuò)展空間,以便存放更多的元素。上自動(dòng)翻倍擴(kuò)展空間,以便存放更多的元素。4empty(): 測(cè)試向量能否為空,為空時(shí)前往測(cè)試向量能否為空

39、,為空時(shí)前往true。例題例題(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“

40、 v2.capacity()tv2.empty()endl; v2=v1; coutv2.size()tv2.max_size()t“ v2.capacity()tv2.empty()endl;2、訪問向量中對(duì)象的方法、訪問向量中對(duì)象的方法1front():前往向量中的第一個(gè)元素前往向量中的第一個(gè)元素2back():前往向量中的最后一個(gè)元素前往向量中的最后一個(gè)元素3operator(n):前往向量中下標(biāo)為前往向量中下標(biāo)為n的元素的元素例題:分析以下程序的運(yùn)轉(zhuǎn)結(jié)果例題:分析以下程序的運(yùn)轉(zhuǎn)結(jié)果(lt7_9.cpp)#include #include using namespace std;void

41、 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;3、在向量中插入對(duì)象的方法、在向量中插入對(duì)象的方法1push_back(const T&):在尾部插入一個(gè)元素:在尾部插入一個(gè)元素2insert(iterator it,const T&): 在在it所指的向量位置前插入一個(gè)元素所指的向量位置前插入一個(gè)元素3insert(i

42、terator it,size_type n,const T&X): 在在it所指的向量位置前插入所指的向量位置前插入n個(gè)值為個(gè)值為X的元素的元素例題例題(lt7_10a.cpp)class 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); vector

43、v(per,per+3); cout共有共有v.size() 個(gè)人個(gè)人endl; cout可以存放可以存放v.capacity() 個(gè)人個(gè)人endl; for(int i=0;iv.size();i+)vi.show();v.operator (i).show();void main() coutthe last one is:; v.back().show(); cout“新加一人!新加一人!endl; /尾部追加尾部追加1人人 v.push_back(person(趙六趙六,M,18); cout共有共有v.size() 個(gè)人個(gè)人endl; cout可以存放可以存放v.capacity() 個(gè)人個(gè)人endl; coutthe last one is:; v.back().show();void main() cout“新插入新插入2人!人!endl; /新插入新插入2人人 v.insert(v.begin()+2,2,person(趙六趙六,M,18); cout共有共有v.size()個(gè)人個(gè)人endl; cout可以存放可以存放v.capacity()個(gè)人個(gè)人endl; for(i=0;iv.size();i+) v.operator (i).show(); coutthe last one is:; v.back(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論