c++基礎(chǔ)(STL入門)_第1頁
c++基礎(chǔ)(STL入門)_第2頁
c++基礎(chǔ)(STL入門)_第3頁
c++基礎(chǔ)(STL入門)_第4頁
c++基礎(chǔ)(STL入門)_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1整理pptQQ:77025077博客:Mail:網(wǎng)址:C語言語言C+語言語言 傳智播客傳智播客整理ppt2STL入門導(dǎo)入STL的概念與組成Iterator(迭代器) Container(容器)Algorithm(算法)Adaptors(配接器)整理ppt3導(dǎo)入抽象的重要性計(jì)算機(jī)科學(xué)的重要進(jìn)步,許多是由于發(fā)掘了新的抽象性質(zhì)而促成的面向過程基于對(duì)象面向?qū)ο蠓盒驼韕pt4導(dǎo)入面向過程(Procedure-Oriented)的抽象抽象出Procedure(Function)的概念,把程序分成若干個(gè)子過程。將事物的方法隱藏于各個(gè)函數(shù)內(nèi)C語言。適用于處理小型的程序。對(duì)大型程序, 子程序之間關(guān)系復(fù)雜,不

2、易處理變化的需求引發(fā)軟件危機(jī)的原因需要新的抽象。耦合度變化總是存在的整理ppt5導(dǎo)入面向過程示例調(diào)用子過程時(shí)不用考慮其實(shí)現(xiàn)細(xì)節(jié)。整理ppt6導(dǎo)入基于對(duì)象(Object-Based)的抽象引入抽象數(shù)據(jù)類型(ADT,Abstract Data Type)。C+的類,將事物的屬性與方法緊密地結(jié)合在一起VB、帶類的C。與面向過程相比,可以更好地處理變化,一定程度上化解了軟件危機(jī)。但各個(gè)類之間的關(guān)系不容易處理,而且程序代碼數(shù)量比面向過程時(shí)更大需要新的抽象。整理ppt7導(dǎo)入示例Person是一個(gè)抽象數(shù)據(jù)類型強(qiáng)內(nèi)聚,低耦合。整理ppt8導(dǎo)入面向?qū)ο?Object-Oriented)的抽象抽象出封裝、繼承、多

3、態(tài)( polymorphic )的概念。與基于對(duì)象相比,有更多的間接性。運(yùn)用多態(tài),我們可以調(diào)用某種方法,而不用指定此方法所屬的類型。因而達(dá)到更進(jìn)一步的抽象性。它為我們帶來了什么?MFC(用面向?qū)ο蠹夹g(shù)封裝WindowsAPI,抽象出一個(gè)類體系)整理ppt9導(dǎo)入示例對(duì)用戶封裝了具體的類型,用戶只需和抽象類打交道整理ppt10MFC類體系圖物體類窗口類視圖類邊框類Application Framework整理ppt11導(dǎo)入泛型(Generic)的概念Generic是一種抽象 就如 OO是一種抽象。還沒有語法與之相對(duì)應(yīng)正在開發(fā)中。(Function、Class、D : public B)它為我們帶來

4、了什么?STL。整理ppt12STL的概念何為STL?STL(Standard Template Library)是C標(biāo)準(zhǔn)庫的一部分(80%),是用C Template機(jī)制來表達(dá)泛型的庫。STL(Standard Template Library)是用泛型技術(shù)來設(shè)計(jì)完成的實(shí)例 就如 MFC(Microsoft Foundational Classes)是用面向?qū)ο蠹夹g(shù)來設(shè)計(jì)完成的實(shí)例整理ppt13STL的概念STL抽象的是什么?有些算法并不依賴于數(shù)據(jù)結(jié)構(gòu)的特定實(shí)現(xiàn),而只是依賴于該結(jié)構(gòu)的幾個(gè)基本的語義屬性.STL抽象出這些基本屬性(Concept),成功的將算法與數(shù)據(jù)結(jié)構(gòu)分離,在沒有效率損失的前

5、提下,得到了及大的彈性。整理ppt14STL的概念示例用一個(gè)泛型算法可以處理多種數(shù)據(jù)結(jié)構(gòu)。而且在獲得彈性彈性的同時(shí)運(yùn)行效率效率上和以前相比沒有損失。整理ppt15STL的組成六大組件容器(Container)算法(Algorithm)迭代器(Iterator)仿函數(shù)(Function object)適配器(Adaptor)空間配制器(allocator)STL的六大組件全都是抽象抽象出來的Concepts整理ppt16STL的組成STL在哪里?后綴名?Namespacestd整理ppt17定義并初始化一個(gè)list容器對(duì)區(qū)間內(nèi)每個(gè)元素調(diào)用傳入的操作pfi整理ppt18Copy是一個(gè)泛型算法,它將

6、文件中的內(nèi)容顯示到屏幕上整理ppt19相關(guān)資料STL之父訪談錄 詳細(xì)介紹了STL的歷史,點(diǎn)明了STL的設(shè)計(jì)宗旨以及它與OO的關(guān)系。復(fù)習(xí)C+ Template機(jī)制。習(xí)題:STL example1、STL example2整理ppt20新的語言特性Namespace(名字空間) Template的新特性 新的類型轉(zhuǎn)換運(yùn)算符整理ppt21命名空間(Namespace)現(xiàn)在的軟件多以程序庫、模塊、組件拼湊而成,名稱沖突問題越來越嚴(yán)重。Namespace就是用來解決此問題的。Namespace將不同的標(biāo)識(shí)符號(hào)集合在一個(gè)具體的名稱范圍內(nèi)。整理ppt22命名空間(Namespace)Namespace的名字

7、和標(biāo)識(shí)符號(hào)間以 : :分隔 (類似于Class 與 members之間)整理ppt23命名空間(Namespace)與類不同的是,Namespace是開放的??梢栽诓煌K之間定義和擴(kuò)展namespace。因此可以用namespace來定義模塊、程序庫或組件。整理ppt24命名空間(Namespace)using declaration,我們可以避免一再寫出冗長的namespace名稱using directive這就是一個(gè)using declaration,它使I成為當(dāng)前范圍內(nèi)代表Renwind:I的同義詞。這就是一個(gè)using directive,它使Renwind內(nèi)的所有名字曝光。整理p

8、pt25命名空間(Namespace)using directive會(huì)再度引發(fā)名稱沖突調(diào)用哪一個(gè) i 呢?這種寫法只適用于寫示例程序或相對(duì)小的程序整理ppt26Template的新特性類模板顯示特化(class template explicit specialization )整理ppt27Template的新特性類模板偏特化(class template partial specialization)整理ppt28Template的新特性默認(rèn)模板參數(shù)根據(jù)前一個(gè)模板參數(shù)T,設(shè)定下一個(gè)模板參數(shù)整理ppt29Template的新特性成員模板(member template)模板類的成員函數(shù)可以是

9、一個(gè)模板整理ppt30Template的新特性關(guān)鍵字typename做為類型前的標(biāo)識(shí)符號(hào)。指出SubType是T中定義的一個(gè)類型,因此ptr是一個(gè)指向T:SubType的指針。如果不加typename,表達(dá)式被認(rèn)為是T中的靜態(tài)成員SubType和ptr的乘積。整理ppt31Template的新特性關(guān)鍵字 typenameC的一般規(guī)則是,除了以typename修飾以外,template內(nèi)的任何標(biāo)識(shí)符號(hào)都被視為一個(gè)值(value),而非一個(gè)類型(type)。typename的第二個(gè)作用:在模板聲明中替換關(guān)鍵字class。整理ppt32新的類型轉(zhuǎn)換運(yùn)算符static_cast只有當(dāng)類型轉(zhuǎn)換有所定義,

10、整個(gè)轉(zhuǎn)換才會(huì)成功。由float轉(zhuǎn)換到int有所定義由char*轉(zhuǎn)換到string有所定義整理ppt33新的類型轉(zhuǎn)換運(yùn)算符dynamic_cast將多態(tài)類型向下轉(zhuǎn)型(downcast)為其實(shí)際類型多態(tài)類型運(yùn)行期進(jìn)行檢驗(yàn)整理ppt34新的類型轉(zhuǎn)換運(yùn)算符const_cast、reinterpret_castC語言中的轉(zhuǎn)型(用小圓括號(hào))可替換替換dynamic_cast之外的其它三種類型。也因此無法明確顯示使用它的確切理由。新的轉(zhuǎn)型操作符給了編譯器更多信息,讓編譯器清楚知道轉(zhuǎn)型的理由。整理ppt35Container(容器)容器的概念用來管理一組元素。整理ppt36Container(容器)容器的分類

11、序列式容器(Sequence containers)每個(gè)元素都有固定位置取決于插入時(shí)機(jī)和地點(diǎn),和元素值無關(guān)。vector、deque、list關(guān)聯(lián)式容器(Associated containers)元素位置取決于特定的排序準(zhǔn)則,和插入順序無關(guān)set、multiset、map、multimap整理ppt37序列式容器Vectors將元素置于一個(gè)動(dòng)態(tài)數(shù)組中加以管理。可以隨機(jī)存取元素(用索引直接存?。?。數(shù)組尾部添加或移除元素非??焖佟5窃谥胁炕蝾^部安插元素比較費(fèi)時(shí)。整理ppt38序列式容器Vectors示例用vector前,必須包含頭文件整理ppt39序列式容器Dequesdeque,是“doub

12、le-ended queue”的縮寫。可以隨機(jī)存取元素(用索引直接存?。?。數(shù)組頭部和尾部添加或移除元素都非常快速。但是在中部或頭部安插元素比較費(fèi)時(shí)。整理ppt40序列式容器Deques示例用deque前,必須包含頭文件整理ppt41序列式容器Lists雙向鏈表。不提供隨機(jī)存?。ò错樞蜃叩叫璐嫒〉脑?,O(n))。在任何位置上執(zhí)行插入或刪除動(dòng)作都非常迅速,內(nèi)部只需調(diào)整一下指針。整理ppt42序列式容器Lists示例用list前,必須包含頭文件整理ppt43迭代器(Iterator)簡(jiǎn)述指針與數(shù)組指針與其它數(shù)據(jù)結(jié)構(gòu)呢?比如說鏈表?存儲(chǔ)空間是非連續(xù)的。不能通過對(duì)指向這種數(shù)據(jù)結(jié)構(gòu)的指針做累加來遍歷。能

13、不能提供一個(gè)行為類似指針的類,來對(duì)非數(shù)組的數(shù)據(jù)結(jié)構(gòu)進(jìn)行遍歷呢?這樣我們就能夠以同樣的方式來遍歷所有的數(shù)據(jù)結(jié)構(gòu)(所有容器)。用指針遍歷數(shù)組整理ppt44迭代器(Iterator)簡(jiǎn)述迭代器與容器通過迭代器,我們可以用相同的方式來訪問、遍歷容器。每種容器都必須提供自己的迭代器容器提供一些函數(shù)以獲得迭代器并以之遍歷所有元素。用迭代器遍歷容器泛型抽象整理ppt45迭代器(Iterator)簡(jiǎn)述迭代器的概念迭代器是一個(gè)“可遍歷STL容器內(nèi)全部或部分元素”的對(duì)象。一個(gè)迭代器指出容器中的一個(gè)特定位置。具有遍歷復(fù)雜數(shù)據(jù)結(jié)構(gòu)的能力。整理ppt46迭代器(Iterator)簡(jiǎn)述迭代器的基本操作用法和指針一樣,其實(shí)

14、指針就是一種迭代器運(yùn)算符重載整理ppt47迭代器(Iterator)簡(jiǎn)述迭代器示例整理ppt48關(guān)聯(lián)式容器Sets/Multisets內(nèi)部的元素依據(jù)其值自動(dòng)排序Set內(nèi)的相同數(shù)值的元素只能出現(xiàn)一次,Multisets內(nèi)可包含多個(gè)數(shù)值相同的元素。內(nèi)部由二叉樹實(shí)現(xiàn),便于查找。整理ppt49關(guān)聯(lián)式容器Sets/Multisets用set/multiset前,必須包含頭文件不能用push_back因?yàn)槭亲詣?dòng)排序的。整理ppt50關(guān)聯(lián)式容器Maps/MultimapsMap的元素是成對(duì)成對(duì)的鍵值/實(shí)值,內(nèi)部的元素依據(jù)其值自動(dòng)排序。Map內(nèi)的相同數(shù)值的元素只能出現(xiàn)一次,Multimaps內(nèi)可包含多個(gè)數(shù)值相

15、同的元素。內(nèi)部由二叉樹實(shí)現(xiàn),便于查找。整理ppt51關(guān)聯(lián)式容器Maps/Multimaps用map/multimap前,必須包含頭文件便捷函數(shù),返回一個(gè)pair對(duì)象整理ppt52容器的共通能力所有容器提供的都是value語意,而非reference語意。容器執(zhí)行插入元素的操作時(shí),內(nèi)部實(shí)施拷貝動(dòng)作。所以STL容器內(nèi)存儲(chǔ)的元素必須能夠被拷貝(必須提供拷貝構(gòu)造函數(shù))。每個(gè)容器都提供可返回迭代器的函數(shù),運(yùn)用返回的迭代器就可以訪問元素。通常STL不會(huì)丟出異常。要求使用運(yùn)行者對(duì)確保傳入正確的參數(shù)。整理ppt53容器的共通操作初始化每個(gè)容器都提供了一個(gè)默認(rèn)構(gòu)造函數(shù),一個(gè)拷貝構(gòu)造函數(shù)以某個(gè)數(shù)組的元素為初值完成

16、初始化。以某個(gè)容器的元素為初值完成初始化。整理ppt54容器的共通操作與大小相關(guān)的操作函數(shù)返回迭代器的函數(shù)整理ppt55容器的共通操作比較操作整理ppt56Vector容器詳解大?。⊿ize)和容量(Capacity)capacity(),傳回vector能夠容納的元素個(gè)數(shù)。size(),傳回vector內(nèi)現(xiàn)有元素的個(gè)數(shù)。如果capacity不夠用,則重新分配內(nèi)存使和vector相關(guān)聯(lián)的pointer,reference,iterator全部失效。很費(fèi)時(shí)間。整理ppt57Vector容器詳解賦值操作元素存取整理ppt58Vector容器詳解插入和刪除操作整理ppt59各個(gè)容器的使用時(shí)機(jī)整理pp

17、t60Iterator(迭代器)迭代器的作用能夠讓迭代器與算法不干擾的相互發(fā)展,最后又能無間隙的粘合起來。重載了,!,運(yùn)算符。用以操作復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。容器提供迭代器,算法使用迭代器。整理ppt61Iterator(迭代器)一個(gè)簡(jiǎn)單的例子容器提供提供迭代器算法使用使用迭代器整理ppt62Iterator(迭代器)迭代器的分類不同容器提供自己的迭代器,所以不同迭代器具有不同的能力。不同的算法需要不同的迭代器的能力;相同的算法需要根據(jù)迭代器的能力不同而做相應(yīng)的優(yōu)化。Vector的內(nèi)部是數(shù)組List的內(nèi)部是雙向鏈表因此List提供了自己的sort成員函數(shù)整理ppt63Iterator(迭代器)迭代器的

18、分類read only不能改變iterator所指對(duì)象write only單向迭代器,iter+雙向迭代器,iter+、iter-所有指針的運(yùn)算能力,p+n, p-n, pn, p1-p2, p1p2整理ppt64Iterator(迭代器)一個(gè)例子advance()整理ppt65Iterator(迭代器)迭代器的相關(guān)類型有些算法內(nèi)部需要用到迭代器所代表元素的類型,這個(gè)就是迭代器的相關(guān)類型。迭代器的traits編程技法用來擴(kuò)充容器與算法。整理ppt66Iterator adaptor(迭代器配接器)概念提供和iterator相同的接口,但是改變內(nèi)部的實(shí)現(xiàn)方法。分類Insert iteratorS

19、tream iteratorReverse iterator接口還是迭代器的接口,前綴描述了迭代器的內(nèi)部實(shí)現(xiàn)整理ppt67Iterator adaptor(迭代器配接器)Insert(安插型)iterator整理ppt68設(shè)計(jì)模式 盡管Alexander所指的是城市和建筑模式,但他的思想也同樣適用于面向?qū)ο笤O(shè)計(jì)模式。只是在面向?qū)ο蟮慕鉀Q方案里,我們用對(duì)象和接口代替了墻壁和門窗。兩者的核心都在于提供了相關(guān)問題的解決方案。Gang of Four,設(shè)計(jì)模式Iterator與adaptor是設(shè)計(jì)模式中的兩種。整理ppt69設(shè)計(jì)模式管理模式Don S. Olson, Carol L. Stimmel,

20、 The Manager Pool分析模式Martin Fowler, Analysis Patterns設(shè)計(jì)模式實(shí)現(xiàn)模式Scott Meyers, Effective C+重構(gòu)模式Martin Fowler, Refactoring整理ppt70設(shè)計(jì)模式我們需要這樣一種語言:它讓我們高效地交流、討論那些常見的、重復(fù)出現(xiàn)的設(shè)計(jì)概念,并在這些概念上建立起我們的系統(tǒng)。不要僅僅把模式當(dāng)作解決方案,而要把它們當(dāng)作設(shè)計(jì)的詞匯,這些詞匯可以根據(jù)一定的規(guī)則組合起來形成句子(也就是系統(tǒng)設(shè)計(jì))。Brandon Goldfedder,模式之樂整理ppt71Iterator模式定義:提供一種方法,使用按順序訪問某個(gè)容器所含的各個(gè)元素,而無需曝露該容器的內(nèi)部表述方法。整理ppt72Adaptor模式定義:將一個(gè)類的界面轉(zhuǎn)換為另一個(gè)類的界面,使原本因界面不相容而不能合作的classes,可以一起運(yùn)作。整理ppt73Adaptor模式在STL中,改變iterator界面的叫做iterator

溫馨提示

  • 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)論