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;
}
以上绑定的成员函数只是对对象的成员变量进行自增和打印操作,在实际使用中,可以在函数内部实现其他功能操作。
谢谢阅读。