千家信息网

C++如何使用仿函数

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章将为大家详细讲解有关C++如何使用仿函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。所谓仿函数就是和函数调用非常类似的一种调用方式,实际上仿函数只是重载了
千家信息网最后更新 2025年11月15日C++如何使用仿函数

这篇文章将为大家详细讲解有关C++如何使用仿函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。


所谓仿函数就是和函数调用非常类似的一种调用方式,实际上仿函数只是重载了()运算符,
这种方式在STL容器函数中使用非常普遍,其中又分为函数对象和谓词

class t
{
public:
void operator()(stu& a) 函数对象(一元)
/*
bool operator()(stu& a) 谓词(一元),谓词只会放回布尔值
*/
};
void test(stu& a) 函数

那么调用我们可以很清楚的可以看出
仿函数调用为
t lfun;
lfun(a);
其中lfun为定义的类对象而已
函数调用为
test(a);

他们的调用看起来及其相似。

下面演示仿函数的使用方式

点击(此处)折叠或打开

  1. /*************************************************************************

  2. > File Name: 仿函数.cpp

  3. > Author: gaopeng QQ:22389860 all right reserved

  4. > Mail: gaopp_200217@163.com

  5. > Created Time: Sun 23 Apr 2017 08:03:41 PM CST

  6. ************************************************************************/


  7. #include

  8. #include

  9. #include

  10. #include

  11. using namespace std;





  12. class testfun //仿函数

  13. {

  14. public:

  15. testfun(void)

  16. {

  17. cnt = 0;

  18. }

  19. void operator()(int& a)

  20. {

  21. cnt++;

  22. if( !(a%67))

  23. {

  24. cout<

  25. }

  26. }

  27. int cnt;

  28. };



  29. class stu

  30. {

  31. private:

  32. char name[20];

  33. int age;

  34. friend class stufun;

  35. public:

  36. stu(const char* inc,int b)

  37. {

  38. strcpy(name,inc);

  39. age = b;

  40. }


  41. };


  42. class stufun

  43. {

  44. public:

  45. int equ;

  46. public:

  47. stufun(int m):equ(m){} //构造函数,仿函数中可以存储任何比较条件 这是仿函数(函数对象或者谓词)和函数指针进行传递到STL函数的区别,因为仿函数更加方便

  48. /*

  49. void operator()(stu& a) //仿函数 一元函数对象 stufun(m)比较比m大的值 stu&a代表是STL函数会将每一个容器对象 stu 通过引用传入到a中然后一一进行比较

  50. {

  51. if(a.age == equ)

  52. {

  53. cout<

  54. cout<

  55. }

  56. }

  57. */

  58. bool operator()(stu& a) //一元谓词 stu&a代表是STL函数会将每一个容器对象 stu 通过引用传入到a中然后一一进行比较

  59. {

  60. if(a.age == equ)

  61. {

  62. cout<

  63. cout<

  64. return true;

  65. }

  66. else

  67. {

  68. return false;

  69. }

  70. }


  71. };



  72. void kkfun(int& a)

  73. {

  74. if( !(a%67))

  75. {

  76. cout<

  77. }

  78. }


  79. int main(void)

  80. {

  81. cout<<"test1----"<

  82. vector m;

  83. for(int i = 0;i<999;i++)

  84. {

  85. m.push_back(i);

  86. }

  87. testfun l;

  88. l = for_each(m.begin(),m.end(),testfun());//调用仿函数 匿名函数对象 进行拷贝需要接回来


  89. for_each(m.begin(),m.end(),kkfun);//调用函数指针

  90. cout<<"test2----"<


  91. vector ii;

  92. stu a("gaopeng",31);

  93. stu b("yanllei",30);

  94. stu c("gzh",3);

  95. stu d("test",31);

  96. ii.push_back(a);

  97. ii.push_back(b);

  98. ii.push_back(c);

  99. ii.push_back(d);


  100. //for_each(ii.begin(),ii.end(),stufun());

  101. stufun o(3);

  102. for_each(ii.begin(),ii.end(),o);//调用谓词 定义的函数对象o


  103. // stufun o;

  104. // o(a);



  105. return 0;


  106. }

关于"C++如何使用仿函数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0