【實(shí)驗(yàn)樓學(xué)習(xí)筆記】
STL的原名是“Standard Template Library”,翻譯過來就是標(biāo)準(zhǔn)模板庫(kù)。STL 是 C++ 標(biāo)準(zhǔn)庫(kù)的一個(gè)重要組成部分,STL 實(shí)現(xiàn)了常用的數(shù)據(jù)結(jié)構(gòu)和算法 ,蘊(yùn)含其間的泛型編程和代碼復(fù)用的思想深刻的影響了編程習(xí)慣,像微積分延長(zhǎng)天文學(xué)家壽命一樣,STL延長(zhǎng)了程序員的壽命。 STL 由算法,容器,迭代器,適配器,仿函數(shù)(函數(shù)對(duì)象),空間適配器六大部件組成 。
魚缸是容器,瓶子是容器,飯碗也是容器,STL 的容器也不列外。這里的容器首先是一個(gè)模板類,在類中實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作,而包含這樣的類的實(shí)現(xiàn)就叫一個(gè)容器。STL 有許多這樣的容器,它們包括:向量(vector),列表(list),隊(duì)列(queue),雙端隊(duì)列(deque),優(yōu)先隊(duì)列(Priority queue),集合(set),多種集合(multiset),映射(map),多重映射(multimap)。
適配器
學(xué)習(xí)過數(shù)據(jù)結(jié)構(gòu)的同學(xué)大都知道,數(shù)據(jù)結(jié)構(gòu)不是獨(dú)立的,部分?jǐn)?shù)據(jù)結(jié)構(gòu)是可以相互轉(zhuǎn)換的。比如棧和隊(duì)列可以互相實(shí)現(xiàn)。當(dāng)我們需要一個(gè)碗的時(shí)候我們不一定重新制造,我們可以把瓶子的上部去掉。同樣的道理,當(dāng)我們需要隊(duì)列(queue)的時(shí)候,也可以用雙端隊(duì)列(deque)去實(shí)現(xiàn)。而queue就叫做適配器。STL有三種基本容器vector,deque,list。有用基本容器擴(kuò)展的適配器queue,stack等。適配器主要有容器適配器,迭代器適配器,函數(shù)適配器,它們的作用范圍不同,意思大致一致。后面我們也會(huì)詳細(xì)講到。
仿函數(shù)
又叫做函數(shù)對(duì)象,其本質(zhì)是類的對(duì)象,一種可回調(diào)機(jī)制,在類中重載了()運(yùn)算符,使對(duì)象在用()時(shí)呈現(xiàn)出函數(shù)的特性,所以叫做仿函數(shù)。叫仿函數(shù)體現(xiàn)了它的作用,叫函數(shù)對(duì)象體現(xiàn)其本質(zhì),大家喜歡叫什么都可以。而為什么需要仿函數(shù)呢?因?yàn)镾TL沒有也不可能將所有東西都包含到函數(shù)中,而程序是對(duì)現(xiàn)實(shí)的模擬,現(xiàn)實(shí)又是最復(fù)雜的,一個(gè)sort(),你要 < ,我要 > 。如何協(xié)調(diào)呢?我們可以定義自己需要的仿函數(shù),定制自己的操作。具體的內(nèi)容我們后面會(huì)講。這兒只做說明。
空間配置器
c++ 的一大魅力就是對(duì)底層的操作,你像一個(gè)魔法師一樣,揮舞著魔杖操縱著底層的各種資源。當(dāng)然一個(gè)不好,程序也崩給你看。而空間配置器就是 STL 自己的“內(nèi)存池”。完成對(duì)內(nèi)存的申請(qǐng),釋放,維護(hù)。配置器有兩個(gè)部分:一級(jí)空間配置器,二級(jí)空間配置器。本次課程不會(huì)過度講解配置器,感興趣的同學(xué)可以去看一下實(shí)驗(yàn)樓另外一個(gè)課程:c++ 實(shí)現(xiàn)高性能內(nèi)存池。