您好,欢迎访问三七文档
講師:洪安1標準樣板函式庫(StandardTemplateLibrary)大綱標準樣板函式庫(STL)抽象指標(Iterator)容器(Container)演算法(Algorithm)2標準樣板函式庫(STL)STL(StandardTemplateLibrary)提供多種類別樣板以供使用由以下三大部分所組成Iterator(抽象指標)Container(容器):vector,list,stack,queue,map,…Algorithm(演算法):find,sort,count,…3大綱標準樣板函式庫(STL)抽象指標(Iterator)容器(Container)演算法(Algorithm)4抽象指標(Iterator)Iterator是一種可以讓使用者逐一存取container中元素的工具所有STL的containerC都有(甚至自己寫的class)使用者均可利用C::iteratorit;的方式來宣告iterator,以取得容器內元素的位址容器均有提供begin(),end()成員函數,讓使用者取得容器的第一個元素的位址與最後一個元素後一個的位址5抽象指標(Iterator)範例:6#includeiostream#includevectorusingnamespacestd;intmain(){inta[7]={8,1,3,2,5,1,4};vectorintv(a,a+7);vectorint::iteratorit;for(it=v.begin();it!=v.end();it++)cout*it;coutendl;return0;}大綱標準樣板函式庫(STL)抽象指標(Iterator)容器(Container)演算法(Algorithm)7容器(Containers)Vector動態陣列,此陣列可任意增長其大小,並提供隨機存取List雙向linkedlist,支援循序雙向存取(無法隨機存取)Map支援查表功能之資料結構,資料均以key/value方式存入其他…(stack,queue,set…)8向量vectorvector其特性如同陣列一樣,但又比內建的陣列多了許多好用的功能vector可以動態成長,可以將一個vector指定給另一個vectorvector知道自己內含元素的個數9常用函式[n]取得第索引值n之資料size計算長度front取得開頭元素back取得結尾元素pop_back移除結尾資料push_back新增資料於結尾begin取得開頭元素之抽象指標end取得結尾元素之抽象指標insert插入資料erase刪除資料vector::vector範例:10#includeiostream#includevectorusingnamespacestd;intmain(){inti;intmyints[]={16,2,77,29};vectorintv1(myints,myints+4);vectorintv2;v2=v1;for(i=0;iv2.size();i++)coutv2[i];coutendl;return0;}vector::pop_back,push_back範例:11#includeiostream#includevectorusingnamespacestd;intmain(){vectorintv;intsum=0;v.push_back(100);v.push_back(200);v.push_back(300);while(!v.empty()){sum+=v.back();v.pop_back();}coutsum=sumendl;return0;}vector::begin,end範例:12#includeiostream#includevectorusingnamespacestd;intmain(){vectorintv;vectorint::iteratorit;for(inti=1;i=5;i++)v.push_back(i);for(it=v.begin();itv.end();it++)cout*it;coutendl;return0;}vector::insert範例:13//insertingintoavector#includeiostream#includevectorusingnamespacestd;intmain(){inti;vectorintv;inta[]={10,20,30};v.insert(v.begin(),a,a+3);//插入一段資料於開頭v.insert(v.begin()+1,15);//插入一筆資料於第二個位子v.insert(v.end(),100);//插入一筆資料於最後for(i=0;iv.size();i++)coutv[i];coutendl;return0;}1020301015203010152030100vector::erase範例:14#includeiostream#includevectorusingnamespacestd;intmain(){inti;vectorintv;for(i=1;i=10;i++)v.push_back(i);v.erase(v.begin()+5);//指定一筆資料刪除v.erase(v.begin(),v.begin()+3);//刪除一段資料for(i=0;iv.size();i++)coutv[i];coutendl;return0;}beginbegin+1begin+2begin+3begin+4begin+5begin+6begin+7begin+8begin+912345678910串列listlist其特性主要為實作串列資料結構常用函式size計算長度front取得開頭元素back取得結尾元素begin取得開頭元素之抽象指標end取得結尾元素之抽象指標pop_back,(pop_front)移除結尾(開頭)資料push_back,(push_front)新增資料於結尾(開頭)insert插入資料erase刪除資料remove指定一個資料內容,並刪除reverse資料反置merge合併資料15list::remove範例:#includeiostream#includelistusingnamespacestd;intmain(){inta[]={17,89,7,14};listintL(a,a+4);listint::iteratorit;L.remove(89);for(it=L.begin();it!=L.end();++it)cout*it;coutendl;return0;}16list::reverse範例:#includeiostream#includelistusingnamespacestd;intmain(){listintL;listint::iteratorit;for(inti=1;i10;i++)L.push_back(i);for(it=L.begin();it!=L.end();++it)cout*it;coutendl;L.reverse();//反轉串列for(it=L.begin();it!=L.end();++it)cout*it;coutendl;return0;}17list::merge範例:#includeiostream#includelistusingnamespacestd;intmain(){listdoubleL1,L2;listdouble::iteratorit;L1.push_back(3.1);L1.push_back(2.2);L1.push_back(2.9);L2.push_back(3.7);L2.push_back(7.1);L2.push_back(1.4);L1.merge(L2);L2.push_back(2.1);L1.merge(L2);for(it=L1.begin();it!=L1.end();++it)cout*itendl;return0;}18請寫一段程式碼看看L2此時的內容映射表map19map是一種關聯容器,支援查表功能之資料結構,資料均以key/value方式存入常用函式[n]取得key值為n之valuesize計算長度find尋找資料erase刪除資料insert插入資料count判斷資料是否存在lower_bound,(upper_bound)取得接近下限(上限)之資料map::map範例:20#includeiostream#includemap#includestringusingnamespacestd;intmain(){mapchar,stringm;mapchar,string::iteratorit;m['a']=AndyLee;m['b']=JoeWang;m['c']=MaryLin;for(it=m.begin();it!=m.end();it++){coutm['(*it).first']is(*it).secondendl;}coutmnowcontainsm.size()elements.endl;return0;}map::find,erase範例:21//erasingfrommap#includeiostream#includemapusingnamespacestd;intmain(){mapchar,intm;mapchar,int::iteratorit;//insertsomevalues:m['a']=10;m['b']=20;m['c']=30;m['d']=40;m['e']=50;m['f']=60;it=m.find('b');m.erase(it);//刪除it位置之資料m.erase('c');//刪除key為'c'之資料it=m.find('e');m.erase(it,m.end());//刪除一段資料for(it=m.begin();it!=m.end();it++)cout(*it).first=(*it).secondendl;return0;}map::insert範例:22#includeiostream#includeiomanip#includestring#includemapusingnamespacestd;intmain(){strings[][2]={{black,#ffffff},{white,#000000},{blue,#0000ff},{red,#ff0000},{green,#00ff00},{,}};mapstring,stringm;mapstring,string::iteratorit;for(inti=0;!s[i][0].empty();++i)m.insert(mapstring,string::value_type(s[i][0],s[i][1]));for(it=m.begin();it!=m.end();++it){cout(*it).first=(*it).secondendl;}if((it=m.find(blue))!=m.end()){cout'blue'Find!It'svalueis(*it).secondendl;}return0;}black#ffffffmap::count範例:23#includeiost
本文标题:讲师洪安
链接地址:https://www.777doc.com/doc-987568 .html