您的位置:首页 > 其它

STL函数对象当参数和返回值

2018-04-06 23:57 375 查看
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<set>
#include<algorithm>
#include<functional>
using namespace std;

template<typename T>
class ShowElemt
{
public:
ShowElemt()
{
n = 0;
}
void operator()(T&t)
{
n++;
//		printN();
cout << t <<" ";
}
void printN()
{
cout << "n:" << n << " ";
}
private:
int n;

};

//模板函数
template<typename T>
void FunShowElemt(T  &t)
{
cout << "FunShowElemt:" << t << " ";
}

//普通函数
void FunShowElemt2(int  &t)
{

cout << "FunShowElemt2:" << t << " ";
}

void main01()
{
int a = 10;
ShowElemt<int> showElemt;
showElemt(a);//函数对象的执行很像一个函数 伪函数

FunShowElemt<int>(a);
FunShowElemt2(a);
}

//函数对象是属于类对象,能突破函数概念,能保持调用状态信息
//for_each算法中 函数对象做函数参数
//for_each算法中 函数对象当返回值

void main02()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);

for_each(v1.begin(), v1.end(), ShowElemt<int>());
cout << endl;
for_each(v1.begin(), v1.end(), FunShowElemt2);
cout << endl;

ShowElemt<int> show1;

/*
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));
}
*/

//for_each算法的函数 对象的传递 是元素值传递,不是引用传递
for_each(v1.begin(), v1.end(), show1);
show1.printN();

cout << endl;

show1 = for_each(v1.begin(), v1.end(), show1);//通过for_each算法的返回值看调用的次数
show1.printN();
//结论要点:分清楚 stl算法返回的值是迭代器还是谓词(函数对象)是stl算法入门的重要点
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: