WEB开发网
开发学院软件开发VC STL中仿函数(functors)、类成员和mem_fun的使用 阅读

STL中仿函数(functors)、类成员和mem_fun的使用

 2010-07-15 20:44:13 来源:WEB开发网   
核心提示:众所周知,STL使用起来非常方便,STL中仿函数(functors)、类成员和mem_fun的使用,其中仿函数(functor)扮演了一个非常重要的角色,灵活运用仿函数的使用对于发挥STL强大功能非常关键,如果可以直接使用类的成员函数作为仿函数,那就方便多了,本文详细介绍了如何使用mem_fun和mem_fun1来绑定

众所周知,STL使用起来非常方便,其中仿函数(functor)扮演了一个非常重要的角色。灵活运用仿函数的使用对于发挥STL强大功能非常关键。本文详细介绍了如何使用mem_fun和mem_fun1来绑定类成员函数,使之成为functor

什么是仿函数?就是一个重载了"()"运算符的struct,例如:

struct print_obj{
  void operator(int a)const{
     cout<<a<<endl;
  }
};

在STL的许多算法(algorithm)中都需要使用functor. 如:for_each. 同样在关联容器中也需要使用functor, 如map, set等。经常在使用STL算法的时候,经常需要把仿函数和类联系在一起,如果可以直接使用类的成员函数作为仿函数,那就方便多了。mem_fun的功能就是如此。

先看个简单的例子:

struct D {
 D(int i=0){num=i;}
 int num;
};
struct print_D{
 void operator()(const D* d)const{
   cout<<"I am D. my num="<<d->num<<endl;
  }
};
  
int main()
{
 vector<D*> V;
 V.push_back(new D(1));
 V.push_back(new D(2));
 V.push_back(new D);
 V.push_back(new D(3));
 for_each(V.begin(), V.end(), print_D());
}

编译输出:

I am D. my num=1
I am D. my num=2
I am D. my num=0
I am D. my num=3

1 2  下一页

Tags:STL 函数 functors

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接