課件-第09章群體類和數(shù)據(jù)組織_第1頁
課件-第09章群體類和數(shù)據(jù)組織_第2頁
課件-第09章群體類和數(shù)據(jù)組織_第3頁
課件-第09章群體類和數(shù)據(jù)組織_第4頁
課件-第09章群體類和數(shù)據(jù)組織_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

9模模群體群體數(shù)據(jù)的組函函數(shù)模類模函數(shù)模函數(shù)模板可以用來創(chuàng)建一個(gè)通用功能的函數(shù),以支持多種不同形參,進(jìn)一步簡(jiǎn)化重函數(shù)模板的定義templatetemplateclass類型名1,class類型名{}對(duì)于功能完全一樣,只是參數(shù)類型不同函數(shù),能寫一段通用代碼適用于多種函數(shù)模注注意參數(shù)化類型,template<classTadd(Tx,T{return}函數(shù)模函數(shù)模板定義后,就可以用它生成各種具體的函數(shù)(稱為模板函數(shù))。在函數(shù)據(jù)實(shí)參實(shí)例化(具體化)成具體類型。這個(gè)過程稱為模板的實(shí)例化。函數(shù)模板函數(shù)名<具體類型名1,具體類型名2函數(shù)名<具體類型名1,具體類型名2,...>(實(shí)參表根據(jù)<>中給出的具體類型,用類似于函數(shù)調(diào)用實(shí)參與形參結(jié)合的方式,將模板參數(shù)表中的參數(shù)化類型一一實(shí)例化成具體的類型,函數(shù)中的參數(shù)化類型也一一使用add<double>(89)將Tadd(TxTy)doubleadd(double,使用sum<int,100將Tsumintsumsize獲得初值隱式實(shí)例化

函數(shù)模使用addA’,‘B將Tadd(Tx,Ty)charadd(char,使用隱式實(shí)例化無法初始化模板參數(shù)表中的普通類型的形參,如果模板數(shù)表中使用普通類型參數(shù),必須使用顯式初始化 *函數(shù)模 usingnamespace

函數(shù)模template<classT1,class8T1add(T1x,T2{return}運(yùn)行結(jié)果運(yùn)行結(jié)果

(4,(8,(4,(8,(1,R(8,}類模板的定templatetemplate模板參數(shù)表>class類名{成員名template為模板關(guān)鍵字(rmr)類型,也稱可變類型,類型名為css(或tm);模板參數(shù)表中的類型也可包含普通類型,普通類型的參數(shù)用來為類的成員提供初值。1類模板的定template<classTNOclassTScoreintnum>TNO,TScoreclass{TNO //TScore //TNO{return}intBelowNum(TScore{return}void{}類模板的定template<classTNO,classTScore,intclass{TNOStudentID[num];TScorescore[num];TNOintBelowNum(TScorevoidtemplate<classTNO,classTScore,intintStudent<TNO,TScore,num>::BelowNum(TScore{return}template<classTNO,classTScore,intnum>voidStudent<TNO,TScore,num>::sort(){}template<classTNO,classTScore,intTNOStudent<TNO,TScore,{return}類模板的實(shí)例類模板實(shí)例化、建立對(duì)象的語法如下類類模板名<模板參數(shù)值表>對(duì)象1,對(duì)象2,…,對(duì)象classStringcharvoid{Student<String,float,100>S1;Student<long,int,50>}

編譯Student<String,float,100>S1;時(shí): 取代TNO 取代 取 2.類模板的實(shí)例template<classTNO,classTScore,intclass{TNOTScorescore[num];TNOintBelowNum(TScorevoid

class{StringfloatStringintBelowNum(floatascore);voidsort();默認(rèn)模板參template<classTNO,classintclass{TNOTScorescore[num];TNOintBelowNum(TScorevoid

TScore,num分別給出默認(rèn)值int,10用以下方式實(shí)例化:Student<char*>class{char*intchar*intBelowNum(intascore);voidsort();線性群非線性群體不用位置順序來標(biāo)識(shí)元線性群體中的元素次序與其位置關(guān)系直接訪問、順序訪問和索。在本章我們只介紹直接訪問和順序問…第一個(gè)元 第二個(gè)元 第三個(gè)元 最后一個(gè)元?jiǎng)討B(tài)數(shù)組類模板:例9-數(shù)組類的拷貝構(gòu)造template<classT>Array<T>::Array(constArray<T>&X){intn=size=alist=newif(alist==NULL)T*srcptr=X.alist;//X.alist是對(duì)象X的數(shù)組首地址T*destptr=alist;//alist是本對(duì)象中的數(shù)組首地址while(n--) //逐個(gè)復(fù)制數(shù)組元素*destptr++=}淺拷template<classT>constArray<T>&X){

A占用的內(nèi) B

Asize=alist=}

void{Array<int>Array<int>

}

AA的數(shù)組元占用的內(nèi)B

A的數(shù)組元占用的內(nèi)拷貝 拷貝template<classArray<T>&Array<T>::operator=(constArray<T>&{intn=rhs.size;if(size!=n) delete[]alist;alist=newT[n];if(alist==NULL)Error(memoryAllocationError);size=n;}T*destptr=alist;T*srcptr=rhs.alist;while(n--)*destptr++=*srcptr++;return*this;}template<classT&Array<T>::operator[](int{if(n<0||n>size-1)返回下標(biāo)為nreturn}為什么有的函數(shù)返回引如果返回值為引用。由于引用是對(duì)象的別,所以通過引用當(dāng)然可以改變對(duì)象的值重載指針轉(zhuǎn)換操作template<classT>Array<T>::operatorT*(void)const{//返回當(dāng)前對(duì)象中私有數(shù)組的首地return}指針轉(zhuǎn)換運(yùn)算符的#include<iostream>usingnamespacestd;voidmain(){intvoidread(int*p,intn);read(a,10);}voidread(int*p,int{for(inti=0;i<n;i++)

void{Array<int>a(10);voidread(int*p,n);read(a,10);}voidread(int*p,int{for(inti=0;i<n;i++)}}Array類的應(yīng)鏈單鏈… 單鏈表的結(jié)點(diǎn)類模template<classT>classNode{Node<T>*next;TNode(constT&item,Node<T>*ptrnext=NULL);voidInsertAfter(Node<T>*p);Node<T>*DeleteAfter(void);Node<T>*NextNode(void)const;在結(jié)點(diǎn)之后插入一個(gè)結(jié) ptemplate<classvoidNode<T>::InsertAfter(Node<T>{p->next=next;next //當(dāng)前節(jié)點(diǎn)的指針域指向}刪除結(jié)點(diǎn)之后的結(jié) rNode<T>{Node<T>*tempPtr=if(next==NULL)returnnext=tempPtr->next;returntempPtr;}鏈表的生成結(jié)插入結(jié)查找結(jié)刪除結(jié)遍歷鏈清空鏈特殊的以訪問的這一端稱棧頂,另一端稱棧底 ┆棧的應(yīng)用舉例——函數(shù)①調(diào)fun(參數(shù)

入 出參當(dāng)前參當(dāng)前現(xiàn)返回地②參當(dāng)前現(xiàn)返回地②參當(dāng)前現(xiàn)返回地⑤⑦出⑦⑥當(dāng)前⑥當(dāng)前現(xiàn)返回地棧的應(yīng)用舉例——表達(dá)式處babad

/+/+

+dc+dc*+棧的基本狀棧棧中沒有元棧棧中元素個(gè)數(shù)達(dá)到上一般狀棧中有元素,但未達(dá)到棧滿狀入 出 入 出數(shù)組下 棧初始狀態(tài)(棧空

數(shù)組下0

棧┆┆┆┆入 出┆┆┆ 棧n10棧滿狀棧的基本操初始入出清空訪問棧頂元檢測(cè)棧的狀態(tài)(滿、空棧的應(yīng)例9.9一個(gè)簡(jiǎn)單的整數(shù)計(jì)算,若要計(jì)算"3+5"則輸入"35+"。乘方運(yùn)算符用

溫馨提示

  • 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. 人人文庫(kù)網(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)論