#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<set>
#include<algorithm>
#include<functional>
using namespace std;
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算法入门的重要点
}
template<typename T>
class IsDiv
{
public:
IsDiv(T divisor)
{
this->divisor = divisor;
}
bool operator()(T&t)
{
return(t%divisor == 0);
}
private:
T divisor;
};
void main03()
{
vector<int> v1;
for (int i = 10; i < 33; i++)
{
v1.push_back(i);
}
vector<int>::iterator it;
it = find_if(v1.begin(), v1.end(), IsDiv<int>(4));
if (it == v1.end())
{
cout << "v1中没有被4整除的元素!" << endl;
}
else
{
cout << "v1中第一个被4整除的元素是:" << *it << endl;
}
/*
template<class _InIt,
class _Pr> inline
_InIt find_if(_InIt _First, _InIt _Last, _Pr _Pred)
{ // find first satisfying _Pred
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Pred);
return (_Rechecked(_First,
_Find_if(_Unchecked(_First), _Unchecked(_Last), _Pred)));
}
*/
//传入的_InIt 是迭代器(v2.begin()),返回的也是_InIt,所以也是迭代器
}
void main()
{
main03();
}
STL算法设计理念—— 一元函数对象和一元谓词
最新推荐文章于 2023-04-02 15:43:17 发布