STL算法--函数对象

来源:互联网 发布:我知我师我爱我师ppt 编辑:程序博客网 时间:2024/04/30 16:36

函数对象

算法的头文件

#include<algorithm> //功能:比较、交换、查找、遍历、复制、修改、反转、排序、合并等#include<numeric>//数学运算(加法和乘法序列上的一些操作)#include<functional>//定义了模板类,用于声明函数对象

函数对象,重载了()操作符的类定义的对象,又叫仿函数。

#include<iostream>#include<algorithm>#include<string>#include<vector>using namespace std;//函数对象,类重载了()template<typename T>class ShowElim{public:    ShowElim()    {        n = 0;    }    void Printf()    {        cout << "n" << n << endl;    }    void operator()(T &a) //重载()操作符    {        n++;        cout <<"n="<< n << endl;        cout << a << endl;    }private:        int n;};//函数对象和普通函数的区别//普通函数template<typename T>void funShowElim(T &a){    cout << a << endl;}void funShowElim2(int &a){    cout << a << endl;}void main01(){    int a = 10;    ShowElim<int> showelim;    showelim(a);//函数对象的()的执行 很像一个函数 ---仿函数    funShowElim<int>(a);}

main01的执行结果:
这里写图片描述

//函数对象属于类对象,能突破函数的概念,能保持调用状态信息//函数对象的好处void main02(){    vector<int> v1;    v1.push_back(1);    v1.push_back(2);    v1.push_back(3);//用for_each()来遍历    for_each(v1.begin(), v1.end(), ShowElim<int>());//匿名函数对象 匿名仿函数    cout << endl;    for_each(v1.begin(), v1.end(), funShowElim2);//通过回调函数 谁使用for_each谁填写回调函数的入口地址    ShowElim<int> s2;----------//for_each的函数声明:    //函数对象做函数参数    //template<class _InIt,    //class _Fn1> inline    //  _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)    //{ // perform function for each element    //      _DEBUG_RANGE(_First, _Last);    //      _DEBUG_POINTER(_Func);    //      _For_each(_Unchecked(_First), _Unchecked(_Last), _Func);    //      return (_STD move(_Func));----------    s2=for_each(v1.begin(), v1.end(), s2);    //这里设计形参和实参的问题,所以要用s2来接返回值。    cout << endl;    s2.Printf();}

main02的执行结果:
这里写图片描述

0 0
原创粉丝点击