預定義函式物件:stl模板庫中封裝的函式
函式介面卡: 對於stl中的有些演算法,其輸入引數有些限制(比如引數個數等),因此需要用到函式介面卡將引數適配成適合演算法的輸入,這個是我個人的理解。
1)預定義函式物件基本概念:標準模板庫stl提前定義了很多預定義函式物件,#include 必須包含。
//1使用預定義函式物件:
//類模板plus<> 的實現了: 不同型別的資料進行加法運算
void main41()
}2)算術函式物件
預定義的函式物件支援加、減、乘、除、求餘和取反。呼叫的操作符是與type相關聯的例項
加法:plus
plusstringadd;
sres = stringadd(sva1,sva2);
減法:minus
乘法:multiplies
除法divides
求餘:modulus
取反:negate
negateintnegate;
ires = intnegate(ires);
ires= unaryfunc(negate(),ival1);
3)關係函式物件
等於equal_to
equal_tostringequal;
sres = stringequal(sval1,sval2);
不等於not_equal_to
大於 greater
大於等於greater_equal
小於 less
小於等於less_equal
void main42()
4)邏輯函式物件
邏輯與 logical_and
logical_andindand;
ires = intand(ival1,ival2);
dres=binaryfunc( logical_and(),dval1,dval2);
邏輯或logical_or
邏輯非logical_not
logical_notintnot;
ires = intnot(ival1);
dres=unaryfunc( logical_not,dval1);
10.3.2.7函式介面卡
1)函式介面卡的理論知識
2)常用函式函式介面卡
標準庫提供一組函式介面卡,用來特殊化或者擴充套件一元和二元函式物件。常用介面卡是:
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)
具體看如下**:
#include #include "string"
#include #include #include "set"
#include #include "functional"
using namespace std;
//plus預定義的函式物件能實現不同型別的資料+運算
//實現了 資料型別 和 演算法的分離 ==》通過函式物件技術來實現的...
//思考: 怎麼樣知道plus是兩個引數
void main()
/**輸出:
zzzccc
cccccc
bbbaaa
*/ //求ccc出現的次數
string sc = "ccc";
//equal_to() 有兩個引數,left引數來自容器,right引數來自sc
//bind2nd函式介面卡:把預定義函式物件 和 第二個引數進行繫結,函式介面卡的作用是,在
//某些函式中只能接收固定數量的引數,函式介面卡可以將不滿足函式引數要求的輸入適配成合適的函式輸入
//故稱為函式介面卡
int num = count_if(v1.begin(),v1.end(),bind2nd(equal_to(),sc));
cout << num << endl; //輸出 3
}
STL 函式物件 謂詞 預定義函式物件 函式介面卡
過載函式呼叫操作符的類,其物件常稱為函式物件 function object 即它們是行為類似函式的物件,也叫仿函式 functor 其實就是過載 操作符,使得類物件可以像函式那樣呼叫。注意 函式物件 仿函式 是乙個類,不是乙個函式。函式物件 仿函式 過載了 操作符使得它可以像函式一樣呼叫。分類 假...
STL中的函式物件
stl不但使我們能夠更輕鬆 更快捷地編寫複雜的 而且使編寫的 既標準又高度優化。std vectornames std sort names.begin names.end stl另乙個優雅之處在於高度可配置。在以上的 中,使用string的小於 操作符對vector中的string元素進行排序,但...
STL函式物件之自定義函式物件
如何定義自己的函式物件,它使用於任何的繫結器 要定義自己的繫結器要滿足一定的條件 必須提供引數和返回值的型別。stl為我們提供了兩個結構體 template struct unary function template struct binary function 乙個例子 template str...