14.8 調(diào)用操作符和函數(shù)對(duì)象
定義了調(diào)用操作符(Call Operator)類的對(duì)象成為函數(shù)對(duì)象。
14.8.1 與標(biāo)準(zhǔn)庫算法一起使用函數(shù)對(duì)象
函數(shù)對(duì)象 vs 函數(shù)
- 函數(shù)對(duì)象與函數(shù)在調(diào)用方式上非常相似
- 函數(shù)對(duì)象可以比函數(shù)更靈活
在標(biāo)準(zhǔn)算法中使用函數(shù)對(duì)象
14.8.2 標(biāo)準(zhǔn)庫定義的函數(shù)對(duì)象
STL定義了一組算數(shù)与学、關(guān)系與邏輯的函數(shù)對(duì)象類。這些類定義在functional
頭文件中。
- 算術(shù)函數(shù)對(duì)象類型
No. | 操作符 | 函數(shù)對(duì)象類 |
---|---|---|
1 | + |
plus<T> |
2 | - |
minus<T> |
3 | * |
multiplies<T> |
4 | / |
divides<T> |
5 | % |
modules<T> |
6 | - |
negate<T> |
- 關(guān)系函數(shù)對(duì)象類型
No. | 操作符 | 函數(shù)對(duì)象類 |
---|---|---|
1 | == |
equal_to<T> |
2 | != |
not_equal_to<T> |
3 | < |
less<T> |
4 | <= |
less_equal<T> |
5 | > |
greater<T> |
6 | >= |
greater_equal<T> |
- 邏輯函數(shù)對(duì)象類型
No. | 操作符 | 函數(shù)對(duì)象類 |
---|---|---|
1 | && |
logical_and<T> |
2 | ││ |
logical_or<T> |
3 | ! |
logical_not<T> |
函數(shù)對(duì)象按照操作數(shù)個(gè)數(shù)分為:
- 一元函數(shù)對(duì)象(unary function-object):一元減
negate<T>
和一元邏輯非logical_not<T>
- 二元函數(shù)對(duì)象(binary function-object):除一元函數(shù)對(duì)象以外的函數(shù)對(duì)象
在算法中使用STL函數(shù)對(duì)象署恍,例如:sort(v.begin(),v.end(),greater<int>());
14.8.3 函數(shù)對(duì)象的函數(shù)適配器
函數(shù)對(duì)象的適配器狠怨,用于特化和擴(kuò)展一元或者二元函數(shù)對(duì)象,主要分為兩類:
綁定器(binder):給二元函數(shù)對(duì)象綁定一個(gè)常量耗帕,轉(zhuǎn)化成一元函數(shù)對(duì)象。包括
bind1st
和bind2nd
袱贮。取反器(negator):將謂詞函數(shù)對(duì)象結(jié)果取反仿便。包括
not1
和not2
。
Funtion | 作用 |
---|---|
bind1st |
綁定函數(shù)的第一個(gè)參數(shù) |
bind2nd |
綁定函數(shù)的第二個(gè)參數(shù) |
not1 |
一元謂詞函數(shù)取反 |
not2 |
二元謂詞函數(shù)取反 |
例子:
計(jì)算出集合v
中攒巍,不小于10元素的個(gè)數(shù)
count_if(v.begin(),v.end(),not1(bind2nd(less_equal<int>(),10));
思考:binder能否給二元函數(shù)對(duì)象綁定變量嗽仪?
思考:binder能否給三元及以上的函數(shù)對(duì)象綁定?
收獲
本節(jié)介紹STL的函數(shù)對(duì)象和函數(shù)對(duì)象適配器柒莉。
- 函數(shù)對(duì)象(6個(gè)算術(shù)闻坚,6個(gè)關(guān)系,3個(gè)邏輯)
- 函數(shù)對(duì)象適配器(2個(gè)綁定器和2個(gè)取反器)
思考
- binder能否給二元函數(shù)對(duì)象綁定變量常柄?
- binder能否給三元及以上的函數(shù)對(duì)象綁定鲤氢?