C++ 11 特性:中的算法

參考文獻:《C++ Primer》


一、algorithm介紹

algorithm譯爲算法,提供了大量基於迭代器的非成員模版函數。本文將盡可能全面的講解algorithm頭文件下的算法以及使用。


二、說明

  • benend表示元素範圍的迭代器
  • ben2表示第二個輸入序列開始位置的迭代器,end2表示第二個輸入序列的末尾位置。若沒有end2的話,則第一個輸入序列的長度與第二個輸入序列的長度一致。
  • dest表示目的序列的迭代器。對於給定輸入序列,算法需要生成多少元素,目的序列必須保證能保存同樣多的元素。
  • unaryPredbinaryPred是一元與二元謂詞。
  • unaryOpbinaryOp是可調用對象,可分別使用來自輸入序列的一個和兩個實參來調用。

三、算法

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。


如有不對的地方歡迎大家指正交流 ,持續更新中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章