类模板与函数对象

来源:互联网 发布:混沌与秩序2救赎数据库 编辑:程序博客网 时间:2024/06/10 10:28
# include <iostream># include <vector># include <list># include <algorithm>using namespace std;//class absInt{//  public ://  int operator() (int val){////  }//};//与上面的等价struct absInt{    //重载操作符:函数调用操作符    int operator() (int val){        return val<0?-val:val;    }};//普通的函数模板template<typename elementType>void FuncDisplayElement(const elementType & element){    cout<<element<<" ";}//对象模板函数template<typename elementType>struct DisplayElement{    //存储状态    int m_nCount;     DisplayElement(){        m_nCount = 0;     }    void operator() (const elementType & element) /*const 当有修改把const去掉*/{        m_nCount++;        cout<<element<<"  ";    }};int main(){    absInt absObj;//声明一个对象    int i = -52;    int j = absObj(i);//函数对象 ,会调用载操作符    cout<<j<<endl;    vector<int> a;    for(int k=0;k<10;k++){        a.push_back(k);    }    list<char> b;    for(char c='a';c<'k';c++){        b.push_back(c);    }    //STL算法    // 1.for_each算法的目的,从a.begin开始,到a.end结束,调用 DisplayElement的函数模板     for_each(a.begin(),a.end(),DisplayElement<int>());    cout<<endl<<endl;    for_each(b.begin(),b.end(),DisplayElement<char>());     cout<<endl<<endl;    DisplayElement<int> mResult;    mResult = for_each(a.begin(),a.end(),mResult);//返回一个新的状态     cout<<mResult.m_nCount<<endl<<endl;     return 0;}
0 0