STL之仿函式

2021-10-04 04:59:51 字數 2735 閱讀 5428

這裡介紹仿函式,謂詞,內建函式物件,介面卡的用法

仿函式: 又稱函式物件,實際上是過載操作符()其中不定義構造和析構函式

只有乙個引數是一元仿函式,兩個就是二元

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 來排序。函式物件可以看成是一種 操作 排序時兩兩相鄰元素滿足使這種操作為真,當然我們可以設計乙個函式,然後傳遞函式指標,但是我們需要抽象介面,函式指標不能與介面卡搭配使用...