lxidea的 Boolan STL與泛型編程 學(xué)習(xí)筆記(二)

本周暂论,侯老師繼續(xù)帶領(lǐng)我們深入剖析STL的源碼面褐,并理解泛型編程的奧義。

于是取胎,在此之前展哭,所需要的基礎(chǔ)必要的是

  • C++基本語法
  • 模板基礎(chǔ)
  • 數(shù)據(jù)結(jié)構(gòu)和算法的概念

在不同的編譯器環(huán)境下,各家公司對(duì)標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)也不盡相同闻蛀。
Visual C++ 6.0 編譯器匪傍,可以去...\include下面去找
GNU C++ 4.9.2編譯器,可以去...\4.9.2\include下面去找

OOP和GP的概念得到再一次的區(qū)分和強(qiáng)調(diào)觉痛。在STL中役衡,至少是歷史版本中,幾乎沒有OOP的設(shè)計(jì)方式秧饮,都采用GP的概念進(jìn)行設(shè)計(jì)映挂。

此外泽篮,除了必須的語法基礎(chǔ),還需要知道操作符重載和Templates模板柑船,才不至于迷失在茫茫代碼中帽撑。
模板又分為類模板,函數(shù)模板,成員模板。模板又分為泛化和特化赶舆,以及偏特化躯畴。

本講,我們重點(diǎn)剖析了分配器术陶、迭代器和萃取機(jī)。

  1. 分配器 Allocator

分配器為STL中的容器提供分配內(nèi)存以及釋放內(nèi)存的調(diào)用接口。從源碼上看笙僚,VC6 C++、BC5 C++灵再、GCC 2.9的STL對(duì)operator new()operator delete()都只完成allocate()deallocate()的操作肋层,沒有任何額外特殊的設(shè)計(jì)。但是GCC 2.9有一個(gè)特殊的allocator名稱是alloc()翎迁,它通過一串鏈表來將不同大小的元素分別存儲(chǔ)來降低開銷栋猖。這個(gè)非標(biāo)準(zhǔn)的分派器到了GCC 4.9的時(shí)候,又沒有出現(xiàn)在其任意一個(gè)容器源碼中了汪榔。但是它依然存在于庫(kù)中蒲拉,名稱變化為__pool_alloc

  1. 迭代器 Iterator

迭代器為STL中容器的元素訪問提供類似智能指針的功能痴腌。以鏈表為例雌团,list的迭代器其實(shí)是一個(gè)指針,它指向list中的某一個(gè)node所占用的內(nèi)存區(qū)塊的頭部位置衷掷。因此辱姨,當(dāng)使用者使用迭代器時(shí),迭代器要表現(xiàn)為一個(gè)指針的行為戚嗅,因此它要重載operator ++()雨涛、operator ++(int)operator->()懦胞、operator--()替久、operator*()等指針操作符。這里前加加和后加加要區(qū)分開來分別進(jìn)行重載躏尉,前加加允許疊加使用蚯根,后加加則不允許。

當(dāng)?shù)鞅皇褂谜呤褂脮r(shí),使用者可能會(huì)采用算法來對(duì)容器中的元素進(jìn)行操作颅拦。那么對(duì)于不同的算法蒂誉,它需要知道迭代器的某些特性,來方便的選取最經(jīng)濟(jì)的方式來實(shí)現(xiàn)其功能距帅。因此右锨,迭代器需要向算法提供它的特性,比如是否可以隨機(jī)存取碌秸,元素之間的偏移量是多少绍移,每個(gè)元素的大小等等。

但是讥电,如果使用者丟給算法的是一個(gè)指針蹂窖,那么算法就沒辦法從指針自己得到這些信息了。因?yàn)橹羔槢]有這些屬性恩敌。因此瞬测,萃取機(jī)就作為中介層出現(xiàn)了。

  1. 萃取機(jī) Traits

算法現(xiàn)在不直接詢問迭代器其屬性了纠炮,而是詢問萃取機(jī)涣楷。萃取機(jī)用模板來實(shí)現(xiàn),當(dāng)傳入的類型是迭代器時(shí)抗碰,任何問題都由萃取機(jī)作為中間傳話人,從迭代器那里取得并返回給算法绽乔。

當(dāng)特別的指針類型傳入到萃取機(jī)時(shí)弧蝇,萃取機(jī)就替代指針,回答算法的提問折砸。因?yàn)閭魅胫羔標(biāo)赶虻膶?duì)象類型是已知的看疗,因此萃取機(jī)自動(dòng)的告訴算法,指針的偏移量睦授、元素大小两芳、存取類型等等。

隨后去枷,分別以vector怖辆、array、forward_list容器為例删顶,分析了他們內(nèi)部的迭代器與萃取機(jī)的使用竖螃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逗余,隨后出現(xiàn)的幾起案子特咆,更是在濱河造成了極大的恐慌,老刑警劉巖录粱,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腻格,死亡現(xiàn)場(chǎng)離奇詭異画拾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)菜职,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門青抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人些楣,你說我怎么就攤上這事脂凶。” “怎么了愁茁?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蚕钦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鹅很,道長(zhǎng)嘶居,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任促煮,我火速辦了婚禮邮屁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菠齿。我一直安慰自己佑吝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布绳匀。 她就那樣靜靜地躺著芋忿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疾棵。 梳的紋絲不亂的頭發(fā)上戈钢,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音是尔,去河邊找鬼殉了。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拟枚,可吹牛的內(nèi)容都是我干的薪铜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼恩溅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痕囱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暴匠,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤鞍恢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帮掉,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弦悉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟆炊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稽莉。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涩搓,靈堂內(nèi)的尸體忽然破棺而出污秆,到底是詐尸還是另有隱情,我是刑警寧澤昧甘,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布良拼,位于F島的核電站,受9級(jí)特大地震影響充边,放射性物質(zhì)發(fā)生泄漏庸推。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一浇冰、第九天 我趴在偏房一處隱蔽的房頂上張望贬媒。 院中可真熱鬧,春花似錦肘习、人聲如沸际乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚓庭。三九已至,卻和暖如春仅仆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垢袱。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工墓拜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人请契。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓咳榜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親爽锥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涌韩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容