資源描述:
《標準模板庫(STL)課件.ppt》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、第13章標準模板庫(STL)STL,即StandardTemplateLibrary,不是面向對象的編程,而是一種新的編程模式:泛型編程(GenericProgramming)。STL是C++標準庫的組成部分,STL是很龐大復雜的系統(tǒng),單單就STL就可寫出厚達千頁的技術書籍,所以,本章不可能做到面面俱到,重點在于介紹泛型編程的思想和本質,介紹一些常用的方法,為初學者學習STL提供一些感性認識,起到拋磚引玉的作用。STL是一項比較新的技術,VC6是微軟公司比較老的一款編譯器,其對STL的支持并不是太好,因此
2、,在本章學習時,推薦采用較新的VC2005甚至是VC2008編譯器。13.1理解STLSTL庫是用摸板(template)寫出來的,在第12章中也已經(jīng)提及:模板是STL庫的基礎所在,大致來說,STL是由三部分組成的:容器(container)迭代器(iterator)容器適配器(Adapter)算法(algorithm)容器、容器適配器和迭代器都是用類摸板實現(xiàn)的,迭代器用于遍歷容器中的每一個元素,算法用于操作數(shù)據(jù)。13.1.1容器如果沒有STL的支持,在處理一些復雜問題時,要自行設計存儲模式,如數(shù)組管理,
3、插入刪除操作等,這不但很繁瑣,而且bug頻出,是程序出問題最多的地方。STL運用模板類庫機制,為數(shù)據(jù)存儲,查找和其他操作提供了一整套方案,大大提高了程序的正確性,不僅如此,類庫對常用的很多操作進行了優(yōu)化處理,大大提高了程序的效率。容器即是可容納一些數(shù)據(jù)的模板類,STL中有vector,list,deque,set,map,multimap和multiset等容器。13.1.2適配器適配器就是Interface(接口),對容器、迭代器和算法進行包裝,但其實質還是容器、迭代器和算法,只是不依賴于具體的標準容器
4、、迭代器和算法類型,容器適配器可以理解為容器的模板,迭代器適配器可理解為迭代器的模板,算法適配器可理解為算法的模板。常見的容器適配器有stack、queue和priority_queue。13.1.3迭代器在有的專業(yè)書籍中,迭代器也稱游標,可以將迭代器初步理解為廣義指針,迭代器和指針功能很像,迭代器是通過重載一元的”*”和”->”來從容器中間接地返回一個值。迭代器有5種,依次為:隨機訪問迭代器(RandomAccessIterator)、雙向迭代器(BidirectionalIterator)、前向迭代器
5、(ForwardIterator)、輸入迭代器(InputIterator)和輸出迭代器(OutputIterator),稍后會有詳細的介紹。13.1.4算法STL包含了很多對容器進行處理的函數(shù),它們的處理思路大體相同:使用迭代器來標識要處理的數(shù)據(jù)或數(shù)據(jù)段、以及結果的存放位置,有的函數(shù)還作為對象參數(shù)傳遞給另一個函數(shù),實現(xiàn)數(shù)據(jù)的處理。13.2使用序列式容器容器是STL的基礎,容器有序列式容器(sequentialcontainer)和關聯(lián)式容器(associativecontainer)之分??傮w來說,序列
6、式容器會強調元素的次序,依次維護第一個元素、第二個元素……,直到最后一個元素,面向序列式容器的操作主要是迭代操作,本節(jié)來討論下序列式容器vector、list和deque的用法,以及序列式容器的共同操作。13.2.1序列式容器的創(chuàng)建和元素的訪問要使用序列式容器,必須包含相關的頭文件,vector、list以及deque分別對應于:#include#include#include首先看一下如何創(chuàng)建序列式容器的對象,大體有以下幾種方式:(1)創(chuàng)建空的容器,此時容器中的
7、元素個數(shù)為0。(2)產(chǎn)生特定大小的容器,,此時容器中的元素被創(chuàng)建,但未被顯式初始化,編譯器使用默認值為元素隱式初始化,像int、float和double等內建的數(shù)據(jù)類型會被初始化為0,對于類對象元素,將調用其無參構造函數(shù)(用戶定義的或編譯器缺省提供的)或每個參數(shù)都有默認值的構造函數(shù)。(3)在(2)的基礎上更進一步,創(chuàng)建特定大小的容器,并且為其中的每個元素指定初始值,此時在元素多少的參數(shù)后增加一個參數(shù)。(4)根據(jù)已有同類型的容器創(chuàng)建新容器,并將其中的元素完全復制過來,設obV1、obL1和obD1都是現(xiàn)成的
8、容器,里面存儲的數(shù)據(jù)均為int型,則可用下述命令創(chuàng)建新容器。(5)通過一對迭代器(可暫時理解為指針),以使編譯器決定元素的個數(shù)和出值,這對迭代器用以標識一組元素區(qū)間。13.2.2所有容器都支持的特征中,“obL.begin()”返回的是指向容器第一個元素的迭代器,這是所有容器(容器和容器適配器)都支持的特征,此外,還有如所示的所有容器都支持的特征,其中ob、ob1和ob2是容器對象名:13.2.3序列式容器中元素的插入和刪除在