這裡介紹仿函式,謂詞,內建函式物件,介面卡的用法
仿函式: 又稱函式物件,實際上是過載操作符()其中不定義構造和析構函式
只有乙個引數是一元仿函式,兩個就是二元
eg:
class
func};
intmain()
優點:
①函式物件超越了普通函式的概念,可以在內部儲存其狀態
比如呼叫次數
②函式物件可以作為引數呼叫
假設已定義myprint print為仿函式的物件
void doprint (myprint print,
int num)
void
test03()
③效能好,通用性強
謂詞是 普通函式 或返回值為bool型別的仿函式,可作為乙個判別式
find_if()方法標頭檔案為algorithm
find_if(v.begin(),v.end(),謂詞(仿函式));
返回值是乙個迭代器
eg:假設我要找乙個大於20的數
class
func};
intmain()
以我目前的渣渣水平來看,還不如直接用運算子
可以將其理解為華為的拓展塢(不知道的可以上某寶看看)
也就是說在原有容器中實現某些原本沒有的操作,比如元素相加
此處引用一篇帖子幫助理解
一篇帖子
標頭檔案< functional >
一.函式介面卡
第一步:繫結資料
bind2nd(仿函式,資料);
第二步:繼承類
binary_functional< 引數型別1,引數型別2,返回值 >
第三步:加const修飾operator
class
myprint
:public binary_function<
int,
int,
void
>};
void
test01()
//函式介面卡
結果:
我輸入乙個100,通過介面卡,實現了容器內所有元素都加100的操作
二.取反介面卡
應用:找出大於/小於某個值的數
第一步:取反介面卡not1
第二步:繼承類:unary_functional《引數型別,返回值》
第三步:const修飾operator()
上**:
三.函式指標介面卡作用:將函式指標適配成函式物件
ptr_fun(函式名);==>將函式指標轉換為函式物件(仿函式)
eg:ptr_fun(f1);//將f1轉換為函式物件(仿函式),其實也就是 獲取了函式f1()的功能 或者說,把普通函式f1()變成了仿函式
步驟基本同函式介面卡
上**:
void
myprint02
(int num,
int start)
void
test02()
//函式指標介面卡
四.成員函式介面卡第一步:先定義乙個類,類中要有成員函式
第二步:插入自定義資料型別
第三步:遍歷:for_each(v.begin(),v.end(),mem_fun_ref(&類名::成員函式名))
如果:容器中存放的是物件指標:用mem_fun
如果存放的是物件實體:用mem_fun_ref
上**
class
myclass
void
print()
int num;};
void
test03()
//成員函式介面卡
stl 仿函式 函式物件
定義 stl原始碼剖析 仿函式其實上就是乙個 行為類似函式 的物件。即主體是物件,只是使用起來像乙個函式。傳遞函式指標 templatebool compare to const t x,const t y templatevoid print compare t fun int main 傳遞的是...
STL 仿函式(函式物件)
定義 一種具有函式特徵的物件,呼叫者可以像函式一樣使用該物件,為了能夠 行為類似函式 該物件所在類必須自定義函式呼叫運算子operator 就可以在仿函式物件後面加上一對小括號,以此呼叫仿函式定義的operator 操作。class mul2 class mul3 intmain for each ...
STL 函式物件(仿函式)概述
在stl提供的各種演算法中往往提供兩個版本,而第二個版本中往往第三個引數,就是乙個函式物件,第乙個版本中預設採用operator 來排序。函式物件可以看成是一種 操作 排序時兩兩相鄰元素滿足使這種操作為真,當然我們可以設計乙個函式,然後傳遞函式指標,但是我們需要抽象介面,函式指標不能與介面卡搭配使用...