STL學習3常用演算法3 2介面卡

2021-09-11 18:32:04 字數 2068 閱讀 1635

1、函式物件介面卡

1.1 bind2ndz或者bind1st  將兩個引數進行繫結

1.1.1 bind2nd  將引數繫結為函式物件的第二個引數

1.1.2 bind1st的引數繫結是相反的 將引數繫結為函式物件的第乙個引數

1.2  繼承 public binary_function《型別1,型別2,返回值》

1.3  加const

2、取反介面卡

2.1.1 一元取反  not1

2.1.1.1  繼承 unary_function《型別1,返回值型別》

2.1.2  二元取反 not2

3  函式指標介面卡

3.1 ptr_fun  將函式指標(普通函式)適配為函式物件  用於將普通函式用於需要函式物件處

4 成員函式介面卡

4.1 men_fun_ref  用於容器中存放物件本體

4.2 men_fun 用於容器中存放物件指標 

5 測試程式

#include"pch.h"

#include#include#include#include#includeusing namespace std;

//1、函式物件介面卡

class myprint:public binary_function

//for_each第三個引數只接受傳遞乙個引數的函式物件

//若函式物件需要兩個引數 使用內建函式物件

/*使用步驟:1、包含functional標頭檔案 將引數bind2nd進行繫結

2、做繼承 public binary_function《引數1,引數2,返回值》

3、過載()函式後加const

*/int num;

cout << "請輸入起始值:";

cin >> num;

//bind2nd 將引數繫結為函式物件的第二個引數

for_each(v.begin(), v.end(),bind2nd(myprint(),num) );

//bind1st的引數繫結是相反的 將引數繫結為函式物件的第乙個引數

//for_each(v.begin(), v.end(), bind1st(myprint(), num)); }

//取反介面卡

class greaterthen5:public unary_function

};void test02()

vector::iterator pos;

pos=find_if(v.begin(), v.end(), greaterthen5());

if (pos != v.end())

else

//取反介面卡使用

//方法一 更改自定義函式物件

/* 1、一元取反 not1

2、繼承public unary_function《型別1,返回值》

3、加const*/

pos = find_if(v.begin(), v.end(),not1( greaterthen5()));

//方法二 全部採用內建函式

//pos = find_if(v.begin(), v.end(), not1(bind2nd(greater(),5)));

if (pos != v.end())

else }

//函式指標介面卡

void myprint3(int val,int start)

void test03()

int num;

cout << "請輸入起始值:";

cin >> num;

//函式指標介面卡將普通函式指標 適配成函式物件

//ptr_fun

for_each(v.begin(), v.end(),bind2nd(ptr_fun(myprint3),num));

}//成員函式介面卡

class person

void print()const

string m_name;

int m_age;

};void test04()

int main()

STL介面卡 函式介面卡

有時候需要對內建函式物件返回值進行進一步的簡單計算,或者填上多餘的引數,不能直接代入演算法。函式介面卡實現了這一功能,函式介面卡是將一種函式物件轉化為另一種符合要求的函式物件。函式介面卡可以分為4個大類 繫結介面卡 組合介面卡 指標函式介面卡和成員函式介面卡。需求 在遍歷容器的時候,將容器中的值全部...

STL 介面卡實現

函式介面轉函式物件介面的介面卡 內部呼叫引數為指標型別 template class const mem fun t public unary function ret operator const tp p const private ret tp m f const const函式介面轉函式物件...

STL 容器介面卡

那麼c 中的容器介面卡是幹什麼的呢?可以做乙個模擬,我們已有的容器 比如vector list deque 就是裝置,這個裝置支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器...