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

前記:本周進(jìn)入STL的最后一周钧惧,主要講解的是各種泛型算法:非變易型算法丧裁,變易型算法礁阁,排序,數(shù)值算法族奢,最后還介紹了內(nèi)存分配器姥闭。下面為我的一些個(gè)人所得:

算法(Algorithms)

在STL中算法可以比喻為刻刀,通過對(duì)各種精妙算法的運(yùn)用越走,才能將程序雕刻成一座完美的藝術(shù)品棚品。
重要的一點(diǎn)是算法是數(shù)學(xué)思想靠欢,并不是STL或者C++所獨(dú)有。STL的標(biāo)準(zhǔn)算法是將一些精妙的算法思想進(jìn)行了實(shí)作(實(shí)現(xiàn))铜跑,以方便我們快捷的運(yùn)用门怪。因此在使用他們的時(shí)候,不光應(yīng)該知道怎么使用锅纺,更應(yīng)該知道其算法思想及其實(shí)現(xiàn)方式掷空。只有后兩者才是算法真正有價(jià)值的核心。
首先應(yīng)該了解一點(diǎn)囤锉,算法一般不是成員函數(shù)坦弟,而是搭配迭代器使用的全局函數(shù)。這樣也是為了使算法更好的配合更多的容器進(jìn)行使用官地。
算法大體上分為四類:
1酿傍、非變易型算法:指不直接修改其所操作的容器內(nèi)容的算法。
2驱入、變易型算法:指可以修改它們所操作的容器內(nèi)容的算法赤炒。
3、排序算法:包括對(duì)序列進(jìn)行排序和合并的算法亏较、搜索算法以及有序序列上的集合操作莺褒。
4、數(shù)值算法:對(duì)容器內(nèi)容進(jìn)行數(shù)值計(jì)算宴杀。

帶后綴名的算法

在以上總體基礎(chǔ)上癣朗,還需要注意的兩個(gè)很特別的詞尾(后綴):
1,后綴_if
例如count(),find()的非變易型算法或者remove()這樣的非變易型算法旺罢,要求參數(shù)傳遞一個(gè)值旷余,與區(qū)間內(nèi)容進(jìn)行比較,得出想要的結(jié)果扁达。但是如果我們想要傳遞一個(gè)函數(shù)或者仿函數(shù)正卧,例如判定OP(elem)的true或false來得出結(jié)果呢,這就要用到后綴_if了跪解,比如count_if():

difference_type
count_if(InputIterator beg,InputIterator end,UnaryPredicate op)

表示計(jì)算在[beg,end)區(qū)間中op(elem)判定為true的元素個(gè)數(shù)炉旷。
2,后綴_copy
replace(),remove()等算法是在容器本體上進(jìn)行的修改操作叉讥,如果不想修改原容器窘行,而是將修改后的內(nèi)容復(fù)制到新的區(qū)間里呢?用_copy后綴就對(duì)啦图仓。
例如:remove_copy()

OutputInterator
remove_copy (InputIterator sourceBeg, InputIterator sourceEnd,
                       OutputIterator destBeg,
                       const T& value)

表示復(fù)制[beg,end)區(qū)間內(nèi)的值到destBeg開始的目標(biāo)區(qū)間罐盔,并將與值value相等的值移除。原區(qū)間內(nèi)容不變哦救崔。

當(dāng)然_if和_copy也可以一起使用哦惶看,例如remove_copy_if:

OutputInterator
remove_copy_if (InputIterator sourceBeg, InputIterator sourceEnd,
                       OutputIterator destBeg,
                       UnaryPredicat op)

表示復(fù)制[beg,end)區(qū)間內(nèi)的值到destBeg開始的目標(biāo)區(qū)間捏顺,并將op(elem)判定為ture的值移除,原區(qū)間內(nèi)容不變纬黎。

復(fù)雜度

復(fù)雜度是算法的帶來的數(shù)學(xué)性質(zhì)幅骄。復(fù)雜度與程序效率息息相關(guān)。
分為兩種(參考資料[1]):
1本今,時(shí)間復(fù)雜度
包含時(shí)間頻度T(n)和時(shí)間復(fù)雜度O(f(n))兩個(gè)概念拆座。簡(jiǎn)單的說就是運(yùn)行時(shí)間上的效率。
2诈泼,空間復(fù)雜度
一個(gè)程序的空間復(fù)雜度是指運(yùn)行完一個(gè)程序所需內(nèi)存的大小懂拾。利用程序的空間復(fù)雜度,可以對(duì)程序的運(yùn)行所需要的內(nèi)存多少有個(gè)預(yù)先估計(jì)铐达。
包含兩個(gè)部分:
(1)固定部分岖赋。主要包括指令空間(即代碼空間)、數(shù)據(jù)空間(常量瓮孙、簡(jiǎn)單變量)等所占的空間唐断。這部分屬于靜態(tài)空間。
(2)可變空間杭抠。這部分空間的主要包括動(dòng)態(tài)分配的空間脸甘,以及遞歸棧所需的空間等。這部分的空間大小與算法有關(guān)偏灿。
一個(gè)算法所需的存儲(chǔ)空間用f(n)表示丹诀。S(n)=O(f(n))  其中n為問題的規(guī)模,S(n)表示空間復(fù)雜度翁垂。
在STL中主要以Big-O表示法分類算法的運(yùn)行時(shí)間铆遭。指的是將一個(gè)算法的運(yùn)行時(shí)間以輸入量n的函數(shù)表示:
O(1) 常數(shù) 運(yùn)行時(shí)間與元素個(gè)數(shù)無關(guān)。
O(log(n)) 對(duì)數(shù) 運(yùn)行時(shí)間隨元素個(gè)數(shù)呈對(duì)數(shù)增長沿猜。
O(n) 線性 運(yùn)行時(shí)間隨元素個(gè)數(shù)n的增長呈線性增長枚荣。
O(n*long(n)) n-log-n 運(yùn)行時(shí)間隨元素個(gè)數(shù)呈"線性和對(duì)數(shù)的乘積"增長。
O(n2) 二次方 運(yùn)行時(shí)間隨元素個(gè)數(shù)呈平方增長啼肩。
在大型程序中復(fù)雜度的重要性體現(xiàn)的尤其明顯橄妆。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祈坠,隨后出現(xiàn)的幾起案子害碾,更是在濱河造成了極大的恐慌,老刑警劉巖赦拘,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慌随,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡另绩,警方通過查閱死者的電腦和手機(jī)儒陨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笋籽,“玉大人蹦漠,你說我怎么就攤上這事〕岛#” “怎么了笛园?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侍芝。 經(jīng)常有香客問我研铆,道長,這世上最難降的妖魔是什么州叠? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任棵红,我火速辦了婚禮,結(jié)果婚禮上咧栗,老公的妹妹穿的比我還像新娘逆甜。我一直安慰自己,他們只是感情好致板,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布交煞。 她就那樣靜靜地躺著,像睡著了一般斟或。 火紅的嫁衣襯著肌膚如雪素征。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天萝挤,我揣著相機(jī)與錄音御毅,去河邊找鬼。 笑死平斩,一個(gè)胖子當(dāng)著我的面吹牛亚享,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绘面,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼欺税,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了揭璃?” 一聲冷哼從身側(cè)響起晚凿,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘦馍,沒想到半個(gè)月后歼秽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡情组,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年燥筷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箩祥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肆氓,死狀恐怖袍祖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谢揪,我是刑警寧澤蕉陋,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站拨扶,受9級(jí)特大地震影響凳鬓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜患民,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一缩举、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酒奶,春花似錦蚁孔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至另伍,卻和暖如春鼻百,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摆尝。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工温艇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堕汞。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓勺爱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讯检。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琐鲁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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