赞
踩
- #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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。