当前位置:   article > 正文

for_each和transform用法比较_java 使用lists.transform 和 foreach的区别

java 使用lists.transform 和 foreach的区别
  1. #include <iostream>        
  2. #include<string>        
  3. #include <vector>        
  4. #include <list>        
  5. #include <set>        
  6. #include <map>        
  7. #include <algorithm>        
  8. #include <functional>  
  9. #include<iterator>
  10. using namespace std;
  11. template <class T>
  12. void printV( T &v)
  13. {
  14.     for (T::iterator it = v.begin();it!=v.end();it++)
  15.     {
  16.         cout<<*it<<" ";
  17.     }
  18. }
  19. int increase(int i)
  20. {
  21.     return 100+i;
  22. }
  23. void showElement(const int &n)
  24. {
  25.     cout<<n<<" ";
  26.     
  27. }
  28. int showElement2(const int &n)
  29. {
  30.     cout<<n<<" ";
  31.     return n;
  32. }
  33. void display()
  34. {
  35.     vector<int> v;
  36.     v.push_back(1);
  37.     v.push_back(3);
  38.     v.push_back(5);
  39.     printV<vector<int>>(v);
  40.     cout<<endl;
  41.     //使用回调函数
  42.     transform(v.begin(),v.end(),v.begin(),increase);
  43.     printV<vector<int>>(v);
  44.     cout<<endl;
  45.     //使用函数适配器
  46.     transform(v.begin(),v.end(),v.begin(),bind2nd(plus<int>(),100));
  47.     printV<vector<int>>(v);
  48.     cout<<endl;
  49.     //使用预定义函数对象  negate取反
  50.     transform(v.begin(),v.end(),v.begin(),negate<int>());
  51.     printV<vector<int>>(v);
  52.     cout<<endl;
  53.     //使用函数适配器 把结果放到list容器
  54.     list<int> ll;
  55.     ll.resize(v.size());
  56.     transform(v.begin(),v.end(),ll.begin(),bind2nd(multiplies<int>(),-1));
  57.     printV<list<int>>(ll);
  58.     cout<<endl;
  59.     //输出流迭代器
  60.     transform(ll.begin(),ll.end(),ostream_iterator<int>(cout," "),bind2nd(multiplies<int>(),2));
  61. }
  62. //transform 和for_each函数比较
  63. //一般情况下:for_each所使用的函数对象 参数是引用 没有返回值   速度快 不灵活
  64. //transform所使用的函数对象,参数一般不使用引用 而是还有返回值 否则报错  速度慢 非常灵活
  65. //? 看二者的函数源码
  66. void display2()
  67. {
  68.     /*template<class _InIt,
  69.      class _Fn1> inline
  70.      _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
  71.      {    // perform function for each element
  72.      _DEBUG_RANGE(_First, _Last);
  73.      _DEBUG_POINTER(_Func);
  74.      return (_For_each(_Unchecked(_First), _Unchecked(_Last), _Func));
  75.      }*/
  76.     /*template<class _InIt,
  77.     class _OutIt,
  78.     class _Fn1> inline
  79.     _OutIt _Transform(_InIt _First, _InIt _Last,
  80.     _OutIt _Dest, _Fn1 _Func)
  81.     {    // transform [_First, _Last) with _Func
  82.     for (; _First != _Last; ++_First, ++_Dest)
  83.     *_Dest = _Func(*_First);
  84.     return (_Dest);
  85.     }*/
  86.     vector<int> v;
  87.     v.push_back(1);
  88.     v.push_back(3);
  89.     v.push_back(5);
  90.     for_each(v.begin(),v.end(),showElement);
  91.     
  92.     transform(v.begin(),v.end(),v.begin(),showElement2);
  93. }
  94. int main()
  95. {
  96.     display2();
  97.     system("pause");
  98.     return 0;
  99. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/589636
推荐阅读
相关标签
  

闽ICP备14008679号