当前位置:   article > 正文

stl算法设计理念_函数对象和函数对象当参数和返回值_stl 检测函数返回类型

stl 检测函数返回类型

传智扫地僧课程学习笔记。


这是老师课上示例代码,

看了两遍,还有点不习惯,

  1. #include <iostream>
  2. using namespace std;
  3. #include "string"
  4. #include <vector>
  5. #include <list>
  6. #include "set"
  7. #include <algorithm>
  8. #include "functional"
  9. //函数对象 类重载了()
  10. template <typename T>
  11. class ShowElemt
  12. {
  13. public:
  14. ShowElemt()
  15. {
  16. n = 0;
  17. }
  18. void operator()(T &t)
  19. {
  20. n ++;
  21. //printN();
  22. cout << t << " ";
  23. }
  24. void printN()
  25. {
  26. cout << "n:" << n << endl;
  27. }
  28. protected:
  29. private:
  30. int n;
  31. };
  32. //函数模板 ==函数
  33. template <typename T>
  34. void FuncShowElemt(T &t)
  35. {
  36. cout << t << endl;
  37. }
  38. //普通函数
  39. void FuncShowElemt2(int &t)
  40. {
  41. cout << t << " ";
  42. }
  43. //函数对象 定义 ; 函数对象和普通函数的异同
  44. //
  45. void main01()
  46. {
  47. int a = 10;
  48. ShowElemt<int> showElemt;
  49. showElemt(a); //函数对象的()的执行 很像一个函数 //仿函数
  50. FuncShowElemt<int>(a);
  51. FuncShowElemt2(a);
  52. }
  53. //函数对象是属于类对象,能突破函数的概念,能保持调用状态信息
  54. //函数对象的好处
  55. // for_each算法中, 函数对象做函数参数
  56. // for_each算法中, 函数对象当返回值
  57. void main02()
  58. {
  59. vector<int> v1;
  60. v1.push_back(1);
  61. v1.push_back(3);
  62. v1.push_back(5);
  63. for_each(v1.begin(), v1.end(), ShowElemt<int>()); //匿名函数对象 匿名仿函数
  64. cout << endl;
  65. for_each(v1.begin(), v1.end(), FuncShowElemt2); //通过回调函数 谁使用for_each 谁去填写回调函数的入口地址
  66. ShowElemt<int> show1;
  67. //函数对象 做函数参数
  68. /*
  69. template<class _InIt,
  70. class _Fn1> inline
  71. _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
  72. { // perform function for each element
  73. _DEBUG_RANGE(_First, _Last);
  74. _DEBUG_POINTER(_Func);
  75. return (_For_each(_Unchecked(_First), _Unchecked(_Last), _Func));
  76. }
  77. */
  78. //1 for_each算法的 函数对象的传递 是元素值传递 ,不是引用传递
  79. for_each(v1.begin(), v1.end(), show1);
  80. show1.printN();
  81. cout << "通过for_each算法的返回值看调用的次数" << endl;
  82. show1 = for_each(v1.begin(), v1.end(), show1);
  83. show1.printN();
  84. //结论 要点: 分清楚 stl算法返回的值是迭代器 还是 谓词(函数对象) 是stl算法入门的重要点
  85. }


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

闽ICP备14008679号