10泛型算法
10.1概述
泛型算法不能改變?nèi)萜鞯拇笮。蕾?lài)于元素類(lèi)型的操作。
10.2初識(shí)泛型算法
10.2.1只讀算法
find
10.2.2寫(xiě)容器元素的算法
fill
back_inserter
10.2.3重排容器元素的算法
sort, unique
10.3定制操作
10.3.1想算法傳遞函數(shù)
謂詞:是一個(gè)可調(diào)用的表達(dá)式,其返回結(jié)果是一個(gè)能用作條件的值(即返回作為條件去判斷)。
一元謂詞接受單一參數(shù)龙宏,二元謂詞兩個(gè)玛界。接受謂詞參數(shù)的算法元素類(lèi)型必須能轉(zhuǎn)換成謂詞的參數(shù)類(lèi)型万矾。
10.3.2lambda
可調(diào)用類(lèi)型有:函數(shù),函數(shù)指針慎框,lambda表達(dá)式良狈,重載了函數(shù)調(diào)用運(yùn)算符的類(lèi)。
向lambda傳遞參數(shù)
Lambda不能有默認(rèn)參數(shù)笨枯,調(diào)用的實(shí)參數(shù)目永遠(yuǎn)與形參數(shù)目相等薪丁。
使用捕獲列表
10.3.3lambda捕獲和返回
值捕獲
值捕獲的前提是變量可以拷貝,與參數(shù)不同馅精,被捕獲的變量的值是在lambda創(chuàng)建時(shí)拷貝严嗜,而不是調(diào)用時(shí)拷貝。
引用捕獲
必須保證被引用的對(duì)象在lambda執(zhí)行的時(shí)候是存在的洲敢。
隱式捕獲
編譯器可以推斷捕獲列表漫玄,但要在列表中加&或=,&表引用沦疾,=表值称近。
可以混合使用隱式捕獲和顯式捕獲第队。但第一個(gè)元素必須是隱式的哮塞。
可變lambda
希望改變一個(gè)捕獲的值,加關(guān)鍵字mutable
指定lambda的返回類(lèi)型
必須尾置返回類(lèi)型
10.3.4參數(shù)綁定bind
頭文件functional凳谦, 命名空間在std::placeholders
例:f(a, b, c, d, e);
Auto g=bind(f, a, b, _2, d, _1);
g(X, Y);等價(jià)于f(a, b, Y, d, X);
10.4再探迭代器
10.4.1插入迭代器
10.4.2iostream迭代器
Iostream_iterator操作
Ostream_iterator操作
10.4.3反向迭代器
rbegin忆畅,rend, crbegin, crend
除了forward_list外其他容器都支持。
反向迭代器與正常的順序是相反的尸执,也有++家凯,--但與正常相反
用base()獲得正常的迭代器。
10.5泛型算法結(jié)構(gòu)
10.5.1 ?5類(lèi)迭代器
10.5.2算法形參模式
Dest表示算法可以寫(xiě)入目的位置的迭代器
10.5.3算法命名規(guī)范
10.6特定容器算法