for_eachアルゴリズム実装
5818 ワード
マルチステートでfor_を実現eachアルゴリズム
最適化はシミュレーション関数と関数テンプレートでfor_を実現するeachアルゴリズム
#include
#include
using namespace std;
//
class Fun
{
public:
virtual void dosomething(int n) = 0;
};
// printf
class Printf:public Fun
{
public:
//
virtual void dosomething(int n)
{
cout<//
class FindMax:public Fun
{
public:
FindMax():max_(0){}
virtual void dosomething(int n)
{
//max(a,b) a,b
max_ = max(n,max_);
}
void GetMax()const
{
cout<private:
int max_;
};
//foreach
void foreach(vector<int>::iterator first,vector<int>::iterator last,Fun& fun)
{
for(vector<int>::iterator it = first;it!=last;it++)
{
fun.dosomething(*it);
}
}
//test
int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
Printf p;
//foreach
foreach(vec.begin(),vec.end(),p);
FindMax f;
//foreach
foreach(vec.begin(),vec.end(),f);
f.GetMax();
return 0;
}
最適化はシミュレーション関数と関数テンプレートでfor_を実現するeachアルゴリズム
#include
#include
using namespace std;
//
class Printf
{
public:
virtual void operator()(int n)
{
cout<//
class FindMax
{
public:
FindMax():max_(0){}
virtual void operator()(int n)
{
//max(a,b) a,b
max_ = max(n,max_);
}
void GetMax()const
{
cout<private:
int max_;
};
//foreach
template <typename iterator,typename Fun>
void foreach(iterator first,iterator last,Fun& fun)
{
for(iterator it = first;it!=last;it++)
{
fun(*it);//()
}
}
//test
int main()
{
vector<int> vec;
//
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
Printf p;
//foreach
foreach(vec.begin(),vec.end(),p);
FindMax f;
//foreach
foreach(vec.begin(),vec.end(),f);
f.GetMax();
return 0;
}