關鍵詞:算法
算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。
- <algorithm>是所有STL頭文件中最大的一個,其中常用到的功能範圍涉及到比較、交換、查找、遍歷操作、複製、修改、反轉、排序、合併等等。
- <numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。
- <functional>中則定義了一些模板類,用以聲明函數對象。
常用算法
常用的查找算法:
adjacent_find()( adjacent 是鄰近的意思),binary_search(),count(),
count_if(),equal_range(),find(),find_if()。
常用的排序算法:
merge(),sort(),random_shuffle()(shuffle是洗牌的意思) ,reverse()。
常用的拷貝和替換算法:
copy(), replace(),
replace_if(),swap()
常用的算術和生成算法:
accumulate()( accumulate 是求和的意思),fill(),。
常用的集合算法:
set_union(),set_intersection(),
set_difference()。
常用的遍歷算法:
for_each(), transform()( transform 是變換的意思)
謂詞與函數對象的概念
函數對象:
重載函數調用操作符的類,其對象常稱爲函數對象(function object),即它們是行爲類似函數的對象。一個類對象,表現出一個函數的特徵,就是通過“對象名+(參數列表)”的方式使用一個類對象,如果沒有上下文,完全可以把它看作一個函數對待。
這是通過重載類的operator()來實現的。
“在標準庫中,函數對象被廣泛地使用以獲得彈性”,標準庫中的很多算法都可以使用函數對象或者函數來作爲自定的回調行爲;
謂詞:
一元函數對象:函數參數1個;
二元函數對象:函數參數2個;
一元謂詞 函數參數1個,函數返回值是bool類型,可以作爲一個判斷式
謂詞可以是一個仿函數,也可以是一個回調函數。
二元謂詞 函數參數2個,函數返回值是bool類型
一元謂詞函數舉例如下
1,判斷給出的string對象的長度是否小於6
bool GT6(const string &s)
{
return s.size() >= 6;
}
2,判斷給出的int是否在3到8之間
bool Compare( int i )
{
return ( i >= 3 && i <= 8 );
}
二元謂詞舉例如下
1,比較兩個string對象,返回一個bool值,指出第一個string是否比第二個短
bool isShorter(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}
函數適配器
標準庫提供一組函數適配器,用來特殊化或者擴展一元和二元函數對象。常用適配器是:
1綁定器(binder):
binder通過把二元函數對象的一個實參綁定到一個特殊的值上,將其轉換成一元函數對象。C++標準庫提供兩種預定義的binder適配器:bind1st和bind2nd,前者把值綁定到二元函數對象的第一個實參上,後者綁定在第二個實參上。
2取反器(negator) :
negator是一個將函數對象的值翻轉的函數適配器。標準庫提供兩個預定義的ngeator適配器:not1翻轉一元預定義函數對象的真值,而not2翻轉二元謂詞函數的真值。
常用函數適配器列表如下:
bind1st(op, value);
bind2nd(op, value);
not1(op);
not2(op);
mem_fun_ref(op);
mem_fun(op);
ptr_fun(op);