c++for_each的用法

库里面的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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值