STL學習筆記之算法(二)

仿函數(shù)紫新、仿函數(shù)類馍刮、函數(shù)等

條款38:把仿函數(shù)類設(shè)計為用于值傳遞

STL中的習慣是當傳給函數(shù)和從函數(shù)返回時函數(shù)對象也是值傳遞的(也就是拷貝)。最好的證據(jù)是標準的for_each聲明勉吻,這個算法通過值傳遞獲取和返回函數(shù)對象:

template Function // 注意值返回

for_each(InputIterator first, InputIterator last, Function f); // 注意值傳遞

條款39:用純函數(shù)做判斷式
先介紹兩個概念–“純函數(shù)”與“判別式”:
純函數(shù)是返回值只依賴于參數(shù)的函數(shù)糟需。如果f是一個純函數(shù),x和y是對象览芳,f(x, y)的返回值僅當x或y的值改變的時候才會改變斜姥。
判斷式是返回bool(或者其他可以隱式轉(zhuǎn)化為bool的東西)。判斷式在STL中廣泛使用路操。標準關(guān)聯(lián)容器的比較函數(shù)是判斷式疾渴,判斷式函數(shù)常常作為參數(shù)傳遞給算法,比如find_if和多種排序算法屯仗。
判斷式類是仿函數(shù)類搞坝,它的operator()函數(shù)是一個判斷式,也就是魁袜,它的operator()返回true或false(或其他可以隱式轉(zhuǎn)換到true或false的東西)桩撮。
重要結(jié)論:判斷式函數(shù)必須是純函數(shù)

條款41:了解使用ptr_fun、mem_fun和mem_fun_ref的原因

假設(shè)有一個可以測試Widget的函數(shù)峰弹,

void test(Widget& w); // 測試w店量,如果沒通就標記為“failed”

此外,有一個Widget的容器:

vector vw; // vw容納Widget

要測試vw中的每個Widget鞠呈,顯然可以這么使用for_each:

for_each(vw.begin(), vw.end(), test); // 調(diào)用#1(可以編譯)

但如果test是Widget的成員函數(shù)而不是非成員函數(shù)融师,也就是說,Widget支持自我測試:

class Widget {
    public:
        void test(); // 進行自我測試蚁吝;如果沒通過就把*this標記為“failed”
};

如果使用for_each對vw中的每個對象調(diào)用Widget::test:

for_each(vw.begin(), vw.end(),&Widget::test); // 調(diào)用#2(不能編譯)

解釋:STL里的一個普遍習慣:函數(shù)和函數(shù)對象總使用非成員函數(shù)的語法形式調(diào)用旱爆,而不直接支持成員函數(shù)的調(diào)用
為了解決這個問題,mem_fun和mem_fun_ref便提出來了:

list lpw; // 同上
...
for_each(lpw.begin(), lpw.end(),mem_fun(&Widget::test)); // 這個現(xiàn)在可以編譯了

條款42:確定less<T>表示operator<

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窘茁,一起剝皮案震驚了整個濱河市怀伦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌山林,老刑警劉巖房待,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驼抹,居然都是意外死亡桑孩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門框冀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洼怔,“玉大人,你說我怎么就攤上這事左驾×土ィ” “怎么了极谊?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長安岂。 經(jīng)常有香客問我轻猖,道長,這世上最難降的妖魔是什么域那? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任咙边,我火速辦了婚禮,結(jié)果婚禮上次员,老公的妹妹穿的比我還像新娘败许。我一直安慰自己,他們只是感情好淑蔚,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布市殷。 她就那樣靜靜地躺著,像睡著了一般刹衫。 火紅的嫁衣襯著肌膚如雪醋寝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天带迟,我揣著相機與錄音音羞,去河邊找鬼。 笑死仓犬,一個胖子當著我的面吹牛嗅绰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搀继,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼办陷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了律歼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤啡专,失蹤者是張志新(化名)和其女友劉穎险毁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體们童,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡畔况,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了慧库。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跷跪。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖齐板,靈堂內(nèi)的尸體忽然破棺而出吵瞻,到底是詐尸還是另有隱情葛菇,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布橡羞,位于F島的核電站眯停,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卿泽。R本人自食惡果不足惜莺债,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望签夭。 院中可真熱鬧齐邦,春花似錦、人聲如沸第租。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煌妈。三九已至儡羔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間璧诵,已是汗流浹背汰蜘。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留之宿,地道東北人族操。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像比被,于是被迫代替她去往敵國和親色难。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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