先贴代码
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Y {
public:
Y()
{
cout<<"Y()"<<endl;
}
Y(const Y& y)
{
cout<<"Y(Y&)"<<endl;
}
~Y()
{
cout<<"~Y()"<<endl;
}
void operator ()(int& k)
{
cout<<k<<endl;
}
};
int main()
{
vector<int> v(5);
for_each(v.begin(), v.end(), Y());
}
里面涉及到的有三个方面
1.重载操作符(),这里操作操作符的调用方式为
int a = 2;
Y y;
y(a);
2.for_each的用法,详细可以查看for_each的源码
// TEMPLATE FUNCTION for_each
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);
_CHECKED_BASE_TYPE(_InIt) _ChkFirst(_CHECKED_BASE(_First));
_CHECKED_BASE_TYPE(_InIt) _ChkLast(_CHECKED_BASE(_Last));
for (; _ChkFirst != _ChkLast; ++_ChkFirst)
_Func(*_ChkFirst);
return (_Func);
}
3.类的对象作为参数的传值的调用方式,会调用拷贝构造函数,这点从运行的结果可以看出。
但是如果我这里没有定义拷贝构造函数的话,它应该会调用默认的构造函数,可是结果出乎我意料,多析构了一次,不知道为何?
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Y {
public:
Y()
{
cout<<"Y()"<<endl;
}
// Y(const Y& y)
// {
// cout<<"Y(Y&)"<<endl;
// }
~Y()
{
cout<<"~Y()"<<endl;
}
void operator ()(int& k)
{
cout<<k<<endl;
}
};
int main()
{
vector<int> v(5);
for_each(v.begin(), v.end(), Y());
}