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;
}


猜你喜欢

转载自blog.csdn.net/lxn18392641463/article/details/78975445