Boolan - C++學(xué)習(xí)筆記 _STL - 第二周

STL與泛型編程
一壁查、 STL是什么
STL(Standard Template Library)朴乖,即標(biāo)準(zhǔn)模板庫(kù),是一個(gè)具有工業(yè)強(qiáng)度的窜护,高效的C++程序庫(kù)效斑。它被容納于C++標(biāo)準(zhǔn)程序庫(kù)(C++ Standard Library)中,是ANSI/ISO C++標(biāo)準(zhǔn)中最新的也是極具革命性的一部分柱徙。該庫(kù)包含了諸多在計(jì)算機(jī)科學(xué)領(lǐng)域里所常用的基本數(shù)據(jù)結(jié)構(gòu)和基本算法鳍悠。為廣大C++程序員們提供了一個(gè)可擴(kuò)展的應(yīng)用框架税娜,高度體現(xiàn)了軟件的可復(fù)用性。
從邏輯層次來(lái)看藏研,在STL中體現(xiàn)了泛型化程序設(shè)計(jì)的思想(generic programming),引入了諸多新的名詞概行,比如像需求(requirements)蠢挡,概念(concept),模型(model)凳忙,容器(container)业踏,算法(algorithmn),迭代子(iterator)等涧卵。與OOP(object-oriented programming)中的多態(tài)(polymorphism)一樣勤家,泛型也是一種軟件的復(fù)用技術(shù);
從實(shí)現(xiàn)層次看柳恐,整個(gè)STL是以一種類型參數(shù)化(type parameterized)的方式實(shí)現(xiàn)的伐脖,這種方式基于一個(gè)在早先C++標(biāo)準(zhǔn)中沒有出現(xiàn)的語(yǔ)言特性--模板(template)。如果查閱任何一個(gè)版本的STL源代碼乐设,你就會(huì)發(fā)現(xiàn)讼庇,模板作為構(gòu)成整個(gè)STL的基石是一件千真萬(wàn)確的事情。除此之外近尚,還有許多C++的新特性為STL的實(shí)現(xiàn)提供了方便蠕啄;
二、STL的六大組件
STL:主要包含 6 個(gè) parts:
容器(Container)戈锻,是一種數(shù)據(jù)結(jié)構(gòu)歼跟,如list,vector格遭,和deques 哈街,以模板類的方法提供。為了訪問容器中的數(shù)據(jù)如庭,可以使用由容器類輸出的迭代器叹卷;
迭代器(Iterator),提供了訪問容器中對(duì)象的方法坪它。例如骤竹,可以使用一對(duì)迭代器指定list或vector中的一定范圍的對(duì)象。迭代器就如同一個(gè)指針往毡。事實(shí)上蒙揣,C++的指針也是一種迭代器。但是开瞭,迭代器也可以是那些定義了operator*()以及其他類似于指針的操作符地方法的類對(duì)象懒震;
算法(Algorithm)罩息,是用來(lái)操作容器中的數(shù)據(jù)的模板函數(shù)。例如个扰,STL用sort()來(lái)對(duì)一個(gè)vector中的數(shù)據(jù)進(jìn)行排序瓷炮,用find()來(lái)搜索一個(gè)list中的對(duì)象,函數(shù)本身與他們操作的數(shù)據(jù)的結(jié)構(gòu)和類型無(wú)關(guān)递宅,因此他們可以在從簡(jiǎn)單數(shù)組到高度復(fù)雜容器的任何數(shù)據(jù)結(jié)構(gòu)上使用娘香;
仿函數(shù)(Function object,仿函數(shù)(functor)又稱之為函數(shù)對(duì)象(function object)办龄,其實(shí)就是重載了()操作符的struct烘绽,沒有什么特別的地方
迭代適配器(Adaptor)
空間配制器(allocator)其中主要工作包括兩部分1.對(duì)象的創(chuàng)建與銷毀 2.內(nèi)存的獲取與釋放。
2.1 部件之間的關(guān)系

三俐填、整個(gè)課程目錄:

第二課:體系結(jié)構(gòu)與內(nèi)核分析
每天一句:源碼之前安接,了無(wú)密碼。

閱讀源碼的好處:(轉(zhuǎn))
很多作家成名之前都閱讀過大量的優(yōu)秀文學(xué)作品英融,經(jīng)過長(zhǎng)期的閱讀和寫作積累盏檐,慢慢的才有可能寫出一些好的、甚至是優(yōu)秀的文學(xué)作品矢赁。 而程序員與此類似糯笙,很多程序員也需要閱讀大量的優(yōu)秀程序或產(chǎn)品,經(jīng)過不斷閱讀和實(shí)踐積累撩银,然后可能寫出好的程序或產(chǎn)品给涕。養(yǎng)成閱讀高品質(zhì)代碼的習(xí)慣 可以提高編寫代碼的能力。
第一個(gè)好處是可以學(xué)習(xí)到很多編程的方法额获,看好的源代碼够庙,對(duì)于提高自己的編程水平,比自己寫源代碼的幫助更大抄邀。當(dāng)然不是說不用自己寫耘眨,而是說,自己寫代碼的同時(shí)境肾,可以從別人寫的好的源代碼中間學(xué)習(xí)到更多的編程方法和技巧剔难。
第二個(gè)好處是,可以提高自己把握大規(guī)模源代碼的能力奥喻。一個(gè)比較大型的程序偶宫,往往都是經(jīng)過了很多個(gè)版本很長(zhǎng)的時(shí)間,有很多人參與開發(fā)环鲤,修正錯(cuò)誤纯趋,添加功能而發(fā)展起來(lái)的。所以往往源代碼的規(guī)模都比較大,少則10-100多k, 多的有好幾十個(gè)MB. 在閱讀大量源代碼的時(shí)候吵冒,能夠提高自己對(duì)大的軟件的把握能力纯命,快速了解脈絡(luò),熟悉細(xì)節(jié)痹栖,不僅僅是編程技巧亿汞,還能在程序的架構(gòu),設(shè)計(jì)方面提高自己的能力结耀。(這里說一句題外話留夜,<<設(shè)計(jì)模式>>這本書相信很多人都看過,而且很多人對(duì)它推崇備至图甜,奉為經(jīng)典。現(xiàn)在也出了不少書鳖眼,都是冠以"設(shè)計(jì)模式"這一名稱黑毅。在書中就提到,設(shè)計(jì)模式并不是一本教材钦讳,不是教你如何去編程序矿瘦,而是把平時(shí)編程中一些固定的模式記錄下來(lái),加以不斷的測(cè)試和改進(jìn)愿卒,分發(fā)給廣大程序員的一些經(jīng)驗(yàn)之談缚去。我在看這本書的時(shí)候,有一些地方一些設(shè)計(jì)方法往往讓我有似曾相識(shí)的感覺琼开,另外一些則是我以前就常常用到的易结。而這些經(jīng)驗(yàn)的獲得,一部分得益于自己的編碼過程柜候,另外一個(gè)很重要的來(lái)源就是閱讀別人寫的源代碼搞动。)
閱讀源代碼第三個(gè)好處,就是獲得一些好的思想渣刷。比如鹦肿,有很多人在開始一個(gè)軟件項(xiàng)目之前都喜歡到sourceforge.net上去找一下,是否有人以前做過相同或者相似的軟件辅柴,如果有箩溃,則拿下來(lái)讀一讀,可以使自己對(duì)這個(gè)軟件項(xiàng)目有更多更深的認(rèn)識(shí)碌嘀。我以前曾經(jīng)想找一本關(guān)于如何閱讀源代碼的書來(lái)看看涣旨,卻沒有找到。相反筏餐,倒是找到了不少分析源代碼的書开泽,比如Linux kernel, Apache source, 等等。
第四個(gè)好處是魁瞪,修復(fù)穆律、檢查惠呼、改進(jìn)代碼、當(dāng)程序出現(xiàn)bug時(shí)或半截接手別人的項(xiàng)目時(shí),需要閱讀源代碼后更改bug或推進(jìn)項(xiàng)目。帶著目的閱讀代碼
第五個(gè)好處是添坊,閱讀的源代碼多了羞福,發(fā)現(xiàn)了解開源軟件的運(yùn)行機(jī)理,提取可重用的材料加以利用崇摄。他山之石,可以攻玉,閱讀源代碼進(jìn)而從現(xiàn)有的優(yōu)秀代碼矫付、算法、設(shè)計(jì)第焰、架構(gòu)中汲取營(yíng)養(yǎng)买优,提高自身的開發(fā)與設(shè)計(jì)能力。

STL標(biāo)準(zhǔn)庫(kù)頭文件在VC目錄下的.../include文件夾中可以看到挺举。
OOP和GP
OOP:試圖將數(shù)據(jù)和操作封裝在一起杀赢。

GP:試圖將數(shù)據(jù)和操作分開。算法和容器通過迭代器聯(lián)系起來(lái)湘纵。

標(biāo)準(zhǔn)庫(kù)的::sort()算法不同用于list容器的排序脂崔。::sort()需要容器有連續(xù)的內(nèi)存。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梧喷,一起剝皮案震驚了整個(gè)濱河市砌左,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伤柄,老刑警劉巖绊困,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異适刀,居然都是意外死亡秤朗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門笔喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)取视,“玉大人,你說我怎么就攤上這事常挚∽魈罚” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵奄毡,是天一觀的道長(zhǎng)折欠。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么锐秦? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任咪奖,我火速辦了婚禮,結(jié)果婚禮上酱床,老公的妹妹穿的比我還像新娘羊赵。我一直安慰自己,他們只是感情好扇谣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布昧捷。 她就那樣靜靜地躺著,像睡著了一般罐寨。 火紅的嫁衣襯著肌膚如雪靡挥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天鸯绿,我揣著相機(jī)與錄音芹血,去河邊找鬼。 笑死楞慈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啃擦。 我是一名探鬼主播囊蓝,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼令蛉!你這毒婦竟也來(lái)了聚霜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤珠叔,失蹤者是張志新(化名)和其女友劉穎蝎宇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祷安,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姥芥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汇鞭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凉唐。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖霍骄,靈堂內(nèi)的尸體忽然破棺而出台囱,到底是詐尸還是另有隱情,我是刑警寧澤读整,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布簿训,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏强品。R本人自食惡果不足惜膘侮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望择懂。 院中可真熱鬧喻喳,春花似錦、人聲如沸困曙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慷丽。三九已至蹦哼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間要糊,已是汗流浹背纲熏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锄俄,地道東北人局劲。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奶赠,于是被迫代替她去往敵國(guó)和親鱼填。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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