#include <iostream>
#include<string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include<iterator>
using namespace std;
template <class T>
void printV( T &v)
{
for (T::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
}
int increase(int i)
{
return 100+i;
}
void showElement(const int &n)
{
cout<<n<<" ";
}
int showElement2(const int &n)
{
cout<<n<<" ";
return n;
}
void display()
{
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(5);
printV<vector<int>>(v);
cout<<endl;
//使用回调函数
transform(v.begin(),v.end(),v.begin(),increase);
printV<vector<int>>(v);
cout<<endl;
//使用函数适配器
transform(v.begin(),v.end(),v.begin(),bind2nd(plus<int>(),100));
printV<vector<int>>(v);
cout<<endl;
//使用预定义函数对象 negate取反
transform(v.begin(),v.end(),v.begin(),negate<int>());
printV<vector<int>>(v);
cout<<endl;
//使用函数适配器 把结果放到list容器
list<int> ll;
ll.resize(v.size());
transform(v.begin(),v.end(),ll.begin(),bind2nd(multiplies<int>(),-1));
printV<list<int>>(ll);
cout<<endl;
//输出流迭代器
transform(ll.begin(),ll.end(),ostream_iterator<int>(cout," "),bind2nd(multiplies<int>(),2));
}
//transform 和for_each函数比较
//一般情况下:for_each所使用的函数对象 参数是引用 没有返回值 速度快 不灵活
//transform所使用的函数对象,参数一般不使用引用 而是还有返回值 否则报错 速度慢 非常灵活
//? 看二者的函数源码
void display2()
{
/*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));
}*/
/*template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt _Transform(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func)
{ // transform [_First, _Last) with _Func
for (; _First != _Last; ++_First, ++_Dest)
*_Dest = _Func(*_First);
return (_Dest);
}*/
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(5);
for_each(v.begin(),v.end(),showElement);
transform(v.begin(),v.end(),v.begin(),showElement2);
}
int main()
{
display2();
system("pause");
return 0;
}
for_each和transform用法比较
最新推荐文章于 2024-01-14 20:28:34 发布