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 就是裝置,這個裝置支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器...