🎺Algorithm

演算法

在STL中除了提供容器(類別樣板), 尚提供演算法(函式 樣板)以供操作之資料

需 include <algorithm>

常用演算法:

  • find

  • count

  • search

  • merge

  • sort

  • for_each

  • transform

  • upper_bound

  • lower_bound

find

用法 :

find(first, last, val)

  • [first]: iterator

  • [last]: iterator

  • [val]: target value type

  • [回傳值]: iterator

針對某個container做搜尋,區間由first及last這兩個iterator指定,目標值為val,找到後回傳其所在元素指標(也是以iterator表示),也就是尋找元素在容器中第一個出現的位子。

陣列搜尋

vector搜尋

count

count(first, last, val)

  • [first]: iterator

  • [last]: iterator

  • [val]: target value type

  • [回傳值]: int

針對某個container做搜尋,區間由first及last這兩個iterator指定,目標值為val,回傳container中元素值為val的個數,也就是統計在容器中共有幾個「指定的元素」。

search(s_first , s_last , t_first , t_last)

  • [s_first] [t_first] : iterator

  • [s_last] [t_last] : iterator

  • [回傳值] : iterator

找尋某一資料序列是否出現在另一個容器中。

範例 : list容器中做搜尋

merge

merge(s1_first, s1_last, s2_first, s2_last, t_first)

  • [s1_first] [s2_first]: iterator

  • [s1_last] [s2_last]: iterator

  • [t_first] : iterator

  • [回傳值] : iterator

合併s1與s2兩資料於t

sort

sort(first, last)

  • sort(first, last, f)

  • [first]: iterator

  • [last]: iterator

  • [f]: 函式 (可有可無)

  • [回傳值]: void

資料排序 (預設由小到大)

for_each

for_each(first, last, f)

  • [first] : iterator

  • [last] : iterator

  • [f] : 函式

  • [回傳值] : 函數物件指標

對container中從first 所指的元素起到last為止,其間每一個元素做某個動作(由函數f指定)

transform

transform(first, last, output, f)

  • [first] : iterator

  • [last] : iterator

  • [output] : container

  • [f] : 函式

  • [回傳值] : 函數物件指標

同for_each,但會把結果放在output容器中

upper_bound & lower_bound

首先,使用的前提是排好序的非遞減陣列。lower_bound( )和upper_bound( )都是利用二分查詢的方法在一個排好序的陣列、容器中進行查詢的。

lower_bound( begin,end,num):從陣列的begin位置到end-1位置二分查詢第一個大於或等於num的數字,找到返回該數字的地址,不存在則返回end。通過返回的地址減去起始地址begin,得到找到數字在陣列中的下標。

upper_bound( begin,end,num):從陣列的begin位置到end-1位置二分查詢第一個大於num的數字,找到返回該數字的地址,不存在則返回end。通過返回的地址減去起始地址begin,得到找到數字在陣列中的下標。

Last updated

Was this helpful?