本文中算法都是指泛型算法。程序員
基本要點:算法
1)算法使用迭代器進行操做。數組
2)不依賴容器,但容器但願使用算法,就必須提供接口。函數
3)通用算法永遠不會執行容器操做。操做僅指:更改容器大小的操做。但,容器內部的算法不包括在通用中。spa
4)算法使用一個 可調用對象 來對元素進行操做。可 調用對象 一般爲函數。
指針
1,算法一般使用默認操做符 [<],[==],[>] 等。對象
2,本質上就是調用一個對象做爲算法的比較。接口
3,一般的方式有:謂詞,操做符重載,lambda表達式。編譯器
5)算法不檢查寫操做:即算法寫入元素值時,程序員必須保證容器已經有足夠空間去保存。此錯誤編譯器不報錯。io
6)特定容器算法,能夠改變容器尺寸。
謂詞:
1)包括一元謂詞和二元謂詞。元概念:接收參數的數量。
2)能夠用來代替算法中原有的比較規則。例如:find() 使用謂詞代替默認需求操做符[ == ]。
3)謂詞能夠是:表達式,函數。
4)謂詞有嚴格的參數數量限制。當超出時,使用lambda表達式。
lambda表達式: [capture list] (parameter list) -> return type { function body }
1)capture list:捕獲列表。
1,能夠得到 lambda表達式 所在函數的局部變量。
2,默認爲copy值。若是,使用引用捕獲,必須保證lambda執行時,變量時存在的。
3,使用mutable關鍵字,能夠傳值使用時,依然改變原變量值。
2)返回類型必須使用 尾置返回
1,尾置返回的一個例子:auto func(int i) -> int(*)[10] { function body } // 返回爲一個int數組。大小爲10
3)function body中包含除return外的語句時:
1,默認返回void,若是須要返回值,請使用 尾置返回。
2,若是隻有一句 return 語句時。會根據return值,返回對應類型。
5)表示式能夠賦值給變量。
1,不肯定:做爲變量,仍是做爲函數指針。我的傾向於指針。
2,簡單使用方式:auto f2 = [&v1] { return ++v1; }