參考文獻:《C++ Primer》
一、algorithm介紹
algorithm譯爲算法,提供了大量基於迭代器的非成員模版函數。本文將盡可能全面的講解algorithm頭文件下的算法以及使用。
二、說明
- ben和end表示元素範圍的迭代器
- ben2表示第二個輸入序列開始位置的迭代器,end2表示第二個輸入序列的末尾位置。若沒有end2的話,則第一個輸入序列的長度與第二個輸入序列的長度一致。
- dest表示目的序列的迭代器。對於給定輸入序列,算法需要生成多少元素,目的序列必須保證能保存同樣多的元素。
- unaryPred和binaryPred是一元與二元謂詞。
- unaryOp和binaryOp是可調用對象,可分別使用來自輸入序列的一個和兩個實參來調用。
三、算法
1.查找對象的算法
1.1 簡單查找
函數名稱 |
---|
find (beg, end, val) |
find_if (beg, end, unaryPred) |
find_if_not (beg, end, unaryPred) |
count (beg, end, val) |
count _if (beg, end, unaryPred) |
find 返回一個迭代器,指向輸入序列中第一個等於val的元素。
find_if 返回一個迭代器,指向輸入序列中第一個滿足unaryPred的元素。
find_if_not 返回一個迭代器,指向輸入序列中第一個不滿足unaryPred的元素。
count 返回一個計數器,指出val出現的次數。
count_if 返回一個計數器,指出滿足unaryPred的元素的個數。
函數名稱 |
---|
all_of (beg, end, unaryPred) |
any_of (beg, end, unaryPred) |
none_of (beg, end, unaryPred) |
all_of 返回一個bool值,unaryPred對所有元素都滿足,則返回true。如果序列爲空也返回true,否則返回false。
any_of 返回一個bool值,unaryPred對任意一個元素滿足,則返回true,否則返回false。如果序列爲空則返回false。
none_of 返回一個bool值,unaryPred對所有元素都不滿足,則返回true。如果序列爲空也返回true,否則返回false。
1.2 查找重複值
函數名稱 |
---|
adjacent_find (beg, end) |
adjacent_find (beg, end, binaryPred) |
search_n (beg, end, count) |
search_n (beg, end, count, binaryPred) |
adjacent_find 返回一個迭代器,指向序列中第一對相鄰重複的元素,如果序列中沒有相鄰重複的元素,則返回end。
search_n 返回一個迭代器,從此位置開始,有count個相等元素。如果序列中不存在這樣的子序列,則返回end。
1.3 查找子序列
函數名稱 |
---|
search (beg1, end1, beg2, end2) |
search (beg1, end1, beg2, end2, binaryPred) |
find_first_of (beg1, end1, beg2, end2) |
find_first_of (beg1, end1, beg2, end2, binaryPred) |
find_end (beg1, end1, beg2, end2) |
find_end (beg1, end1, beg2, end2, binaryPred) |
search 返回一個迭代器,指向第二個子序列在第一個序列中第一次出現的位置,如果未找到匹配的子序列,則返回end1。
find_first_of 返回一個迭代器,指向第二個序列中任意元素在第一個序列中第一次出現的位置,如果未找到匹配的子序列,則返回end1。
find_end 返回一個迭代器,指向第二個子序列在第一個序列中最後一次出現的位置,如果未找到匹配的子序列,則返回end1。
2. 其他只讀算法
函數名稱 |
---|
for_each (beg, end, unaryOp) |
mismatch (beg1, end1, beg2) |
mismatch (beg1, end1, beg2, binaryPred) |
equal (beg1, end1, beg2)) |
equal (beg1, end1, beg2, binaryPred) |
for_each 對輸入序列中的每個元素應用可調用對象unaryOp。
mismatch 比較兩個序列中的元素,返回一個迭代器的pair,表示兩個序列中第一個不匹配的元素。如果所有元素都匹配,則返回的pair中第一個迭代器爲end1,第二個迭代器指向beg2中偏移量等於第一個序列長度的位置。
equal 返回一個bool值,如果兩個序列完全相同則返回true。
如有不對的地方歡迎大家指正交流 ,持續更新中