# 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;
}
类模板与函数对象
最新推荐文章于 2023-10-11 02:40:41 发布