您的位置:首页 > 编程语言 > C语言/C++

c++for_each的用法

2018-01-04 21:09 288 查看
库里面的for_each源码
----------------------------------------------------------------------------------------
template<class _InIt,
class _Fn1> inline
_Fn1 _For_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{	// perform function for each element
for (; _First != _Last; ++_First)
_Func(*_First);
return (_Func);
}

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);
return (_For_each(_Unchecked(_First), _Unchecked(_Last), _Func));
}
-------------------------------------------------------------------------------------
void myfunctions(int i)
{
cout<<" "<<i;
}
//-------------------------------------------
struct myclass
{
void operator()(int i)
{
cout<<" "<<i;
}
}myobject;
//--------------------------------------------
class Meanvalue
{
public:
Meanvalue():num(0),sum(0){}
void operator()(int elem)
{
num++;
sum +=elem;
}
double vlaue()
{
return static_cast<double>(sum)/static_cast<double>(num);
}
operator double()
{
return static_cast<double>(sum)/static_cast<double>(num);
}

private:
long num;
long sum;
};
template<class T>
class AddValue
{
public:
AddValue(const T& v):thevalue(v){}
void operator()(T& elem)
{
elem += thevalue;//这里交换一下就会不一样
}
private:
T thevalue;
};
int main()
{
vector<int>myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
//cout<<"myvector contains"<<endl;
//for_each(myvector.begin(),myvector.end(),myfunctions);
//--------------------------------------------------------
cout<<"classmyvector contains"<<endl;
for_each(myvector.begin(),myvector.end(),myobject);
cout<<endl;
//--------------------------------------------------------
//Meanvalue mv = for_each(myvector.begin(),myvector.end(),Meanvalue());//Meanvalue()相当于Meanvalue.operator()(*p)
//cout<<mv.vlaue()<<endl;
//-----------------------------------------------------------
for_each(myvector.begin(),myvector.end(),AddValue<int>(10));
for_each(myvector.begin(),myvector.end(),myobject);
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: