mem_fun()是STL六大組件中配接器的一種,它接收成員函數指針,使得我們可以將類成員函數當做仿函數來使用。
仿函數一般是在我們使用STL中的算法,進行自定義類型操作時,進行定義的。例如sort()算法,可自定義比較函數,for_each()算法,可自定義遍歷操作等等。
使用mem_fun()可以避免我們自定義仿函數(重載()操作符),而直接使用類中的成員函數,來對類對象進行相應的操作。
以下是代碼實現:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
// 類定義
class display
{
public:
// 成員變量
int val;
// 構造函數
display(int v) :val(v) {}
// 成員函數:進行變量的自增,打印操作
void showValue()
{
++this->val;
cout << "using mem_fun. val = " << this->val << endl;
return;
}
};
int main()
{
// 定義數組,存儲類對象指針
vector<display*> v;
display* d1 = new display(1);
display* d2 = new display(2);
display* d3 = new display(3);
v.push_back(d1);
v.push_back(d2);
v.push_back(d3);
// 使用for_each()算法,綁定類成員函數,對每一個對象的成員變量進行打印操作
for_each(v.begin(), v.end(), mem_fun(&display::showValue));
delete d1;
delete d2;
delete d3;
return 0;
}
以上綁定的成員函數只是對對象的成員變量進行自增和打印操作,在實際使用中,可以在函數內部實現其他功能操作。
謝謝閱讀。