c++学习之函数对象

来源:互联网 发布:淘宝滑动验证加密算法 编辑:程序博客网 时间:2024/06/04 23:34

c++的函数对象,以前接触得比较少,今天重新看了下,感觉这真的是个很使用的技术,相当的好用。

先介绍下什么是函数对象,简单的说就是函数操作符“()”的重载,通过重载函数操作符在类中实现函数的功能,并通过生成类的对象,调用操作符,实现效果就和执行函数一样。有时候函数对象使用起来比函数更加的灵活,而且函数对象能很好的兼容c++的标准库算法,下面一段代码做一个简单的演示:

#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;// // class GT_cls{// public:// GT_cls(int val):bound(val){}// bool operator()(const int &ival){// return ival > bound;// }// private:// int bound ;// };template <typename Type>class Num_Equal{public:Num_Equal(const Type &tt1,const Type &tt2):t1(tt1),t2(tt2) {}bool operator() (const Type &tt1 , const Type &tt2){return tt1 == tt2;}private:Type t1;Type t2;};int main(){// int a =10, b=12;// cin >>a >>b ;// Num_Equal<int> numTest(a,b);//可以用函数对象// bool flag = numTest(a,b);// cout << flag <<endl;// // // cin.clear();vector<string> sVec;cout << "input string" <<endl;string str;while(cin>>str)//ctrl+z结束sVec.push_back(str);cin.clear();cout << "input a special string" <<endl;cin >> str;for(vector<string>::iterator iter= sVec.begin();iter != sVec.end();iter++){//if()Num_Equal<string> str_equal(*iter,str);//使用函数对象if( !str_equal(*iter,str) )*iter = str;}cout <<"string vector: "<<endl;for(vector<string>::iterator iter=sVec.begin();iter != sVec.end() ; iter++){cout << *iter <<endl;}return 0;}
上面的一段代码先定义了一个调用操作符的类,该类的功能是比较两个数是否相等,后面定义了一个string的数据,然后输入一个string,将数据中的元素和输入的string做比较,如果和输入的string不想等和用string替换掉vector中的元素,最后输出,里面的比较方法使用的就是上面定义的类的函数对象