monolake 的GeekBand C++開發(fā)學(xué)習(xí)筆記(六)

前記:本周進(jìn)入了STL與泛型編程。STL幾乎可以當(dāng)作一個新的語言來學(xué),運用上與前面的c++知識在語法、觀念上有很多不同悄晃。但是要真正領(lǐng)悟泛型編程的精髓,還是要深入stl源碼中深入學(xué)習(xí)凿滤、理解妈橄。C++語法知識是基礎(chǔ),泛型編程思想是武器翁脆。課程開始從類模版和函數(shù)模版眷蚓,操作符重載入手。然后引申到泛型編程思想反番,講了特性(Traits)沙热,迭代器等的概念。開始介紹泛型編程中很重要的容器(containers)中的vector和list恬口。以下是本周我學(xué)習(xí)中得出的一些tips校读。

STL標(biāo)準(zhǔn)模版庫

顧名思義沼侣,STL是一個倉庫祖能,龐大的工具集合。它由若干精心勾畫的組件合作構(gòu)筑蛾洛,其中比較核心的是:容器(Containers)养铸,迭代器(Iterators),算法(algorithms)轧膘。
STL的基本觀念是將數(shù)據(jù)和操作分離钞螟。數(shù)據(jù)由容器進(jìn)行管理,操作則由可定制的算法進(jìn)行定義谎碍。迭代器在兩者之間充當(dāng)粘合劑鳞滨,這樣就可以將各種思想和各種容器交互運作。[[1]]

迭代器

迭代器(Iterator)是一個可遍歷STL容器中元素的對象蟆淀。首先它是一個對象拯啦,要遍歷容器中的元素澡匪,必須契合該容器的數(shù)據(jù)結(jié)構(gòu),所以說每一種容器都有自己的迭代器褒链。他們定義一致的接口(使用typedef 關(guān)鍵字唁情,在分析源碼是這個關(guān)鍵字很關(guān)鍵),以便使各種算法能夠通過接口使用他們(或者被他們使用)甫匹。

1,比較重要的接口如下:

begin():返回一個迭代器甸鸟,指向容器起始點,一般指第一個元素(如果有)兵迅。
end():返回一個迭代器抢韭,指向容器的結(jié)束點,一般在最后個元素的后一位喷兼。
所以begin()到end()的區(qū)間是一個半開區(qū)間篮绰,像[begin(),end())。

2,另一個要注意的是季惯,任何容器都定義有兩種迭代器型別:

container::iterator 可讀/寫的迭代器吠各。該類型的迭代器可以對容器內(nèi)容進(jìn)行讀寫操作
container::const_iterator 只可讀的迭代器。該類型的迭代器只可以對容器內(nèi)容進(jìn)行讀訪問勉抓〖致可以聯(lián)想const關(guān)鍵字。

vector(矢量)

vector很像是一個動態(tài)數(shù)組藕筋,可以隨時更改容量大小纵散。內(nèi)部元素總是存在某種順序,可以稱為有序集群(ordered collection)隐圾。
要使用vector伍掀,必須包含頭文件vector,和訪問名稱空間std暇藏。
其聲明是:

namespace std {
template <class T, class Allocator=alloctor<T> >
class vector;
}

需要注意的是蜜笤,雖然vector可以增加、刪減容量盐碱。但是重新配置容量很耗時間把兔,而頻繁的配置內(nèi)存十分不可取。并且一旦你內(nèi)存重新配置瓮顽,vector相關(guān)的reference县好、pointers、iterators都會變化暖混,甚至失效缕贡。所以保留一定的容量對使用vector很有好處。
使用reserve()函數(shù)可以保留適當(dāng)容量,但是它不能縮減容量晾咪。當(dāng)你調(diào)用reserve()縮減容量黔漂,將不引起任何反應(yīng)。


1【引用自《C++標(biāo)準(zhǔn)庫》P74】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禀酱,一起剝皮案震驚了整個濱河市炬守,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剂跟,老刑警劉巖减途,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曹洽,居然都是意外死亡鳍置,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門送淆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來税产,“玉大人,你說我怎么就攤上這事偷崩”倏剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵阐斜,是天一觀的道長衫冻。 經(jīng)常有香客問我,道長谒出,這世上最難降的妖魔是什么隅俘? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮笤喳,結(jié)果婚禮上为居,老公的妹妹穿的比我還像新娘。我一直安慰自己杀狡,他們只是感情好蒙畴,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捣卤,像睡著了一般忍抽。 火紅的嫁衣襯著肌膚如雪八孝。 梳的紋絲不亂的頭發(fā)上董朝,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音干跛,去河邊找鬼子姜。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哥捕。 我是一名探鬼主播牧抽,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遥赚!你這毒婦竟也來了扬舒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤凫佛,失蹤者是張志新(化名)和其女友劉穎讲坎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愧薛,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡晨炕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毫炉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓮栗。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瞄勾,靈堂內(nèi)的尸體忽然破棺而出费奸,到底是詐尸還是另有隱情,我是刑警寧澤进陡,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布货邓,位于F島的核電站,受9級特大地震影響四濒,放射性物質(zhì)發(fā)生泄漏换况。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一盗蟆、第九天 我趴在偏房一處隱蔽的房頂上張望戈二。 院中可真熱鬧,春花似錦喳资、人聲如沸觉吭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲜滩。三九已至,卻和暖如春节值,著一層夾襖步出監(jiān)牢的瞬間徙硅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工搞疗, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留嗓蘑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像桩皿,于是被迫代替她去往敵國和親豌汇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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