C STL 12 函式物件介面卡

2021-07-30 09:30:27 字數 2117 閱讀 8514

我們在前一節介紹了函式物件的概念,本節介紹基於函式物件的乙個概念–函式物件介面卡。

在講函式物件介面卡之前,我們來講一講普通函式,函式物件和函式物件介面卡的關係。

普通函式是對程式功能的一種封裝。這種封裝只提供了方法,卻沒有提供屬性。所以當我們希望使用某些屬性時,我們往往使用普通函式的公升級版–函式物件。我們可以將常用演算法和函式物件結合起來使用,這樣能完成更複雜的功能。當我們定義了乙個函式物件,而這個函式物件又跟我們的需求有一定的偏差時,我們就需要函式物件介面卡了。函式物件介面卡本質上任然是乙個函式;函式物件介面卡提供了對函式物件或者普通函式的操作,使其能夠根據我們的需求來修改函式物件或者普通函式的功能。下面我們從乙個案例開始講起。

加const

//列印小於指定數字的vector容器中的元素

#include

#include

#include

#include

using

namespace

std;

class print_int:public binary_function

}};int main()

for_each(v.begin(), v.end(), bind2nd(print_int(),5)); //繫結第二個引數5

cout

<< endl;

return

0;}

取反介面卡的例子:

#include 

#include

#include

#include

using

namespace

std;

class compare_num:public binary_function

};class compare_5:public unary_function

};int main()

cout

<< endl;

vector

::iterator i = find_if(v.begin(), v.end(), bind2nd(compare_num(),6));

if (i == v.end())

else

auto j = find_if(v.begin(), v.end(), not1(compare_5())); //取反介面卡的用法

if (j == v.end())

else

return

0;}

普通函式介面卡——ptr_fun

#include 

#include

#include

#include

using

namespace

std;

void print(int i,int j)

}void test02()

for_each(v.begin(), v.end(), bind2nd(ptr_fun(print),5)); //使用ptr_fun將普通函式轉換為函式物件,然後給函式物件繫結引數。

cout

<< endl;

}int main()

最後,我們介紹mem_fun 和 mem_fun_ref

我們看一下場景。我們在以上的事例中使用的都是vector資料型別實際上vector可以存放標準資料型別,物件和指標。當我們存放的是物件時,物件本身具有方法。這個方法是定義在類中的成員函式。那麼如何將成員函式轉換成函式物件呢?

這個時候就要使用mem_fun_ref

擴充套件:如果容器中存放的是指標,那麼就是使用方法mem_fun

#include 

#include

#include

#include

using

namespace

std;

class teacher

void print()

void

operator()(teacher &t)

};class teacher_print

};int main()

C STL 容器介面卡

標準庫提供了三種順序容器介面卡 queue priority queue stack.介面卡是標準庫中通用的 概念,包括容器介面卡 迭代器介面卡和函式介面卡。本質上,介面卡是使一事物的行為類似於另一類事物的行為的一種機制。容器介面卡讓一種已 存在的容器型別採用另一種不同的抽象型別的工作方式實現。例如...

C STL 容器介面卡

1 stack 2 priority queue include 1 基礎介紹 priority queue 優先佇列,其底層是用堆來實現的。模板宣告帶有三個引數 priority queue 其中type為資料型別,container 為儲存資料的容器,functional 為元素比較方式。con...

函式物件介面卡

include include include include include include include using namespace std 函式物件介面卡bind1st,bind2nd struct myprint public binary function binary functi...