1. 函数对象的概念
如果一个类将()
运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名仿函数。
函数对象(仿函数)是一个类,不是一个函数
2. 谓词概念
返回bool类型的仿函数称为谓词
如果operator()接受一个参数,那么叫做一元谓词
如果operator()接受两个参数,那么叫做二元谓词
1. #include <vector> 2. #include <algorithm> 3. 4. //二元谓词 5. class MyCompare 6. { 7. public: 8. bool operator()(int num1, int num2) 9. { 10. return num1 > num2; 11. } 12. }; 13. 14. void test01() 15. { 16. vector<int> v; 17. v.push_back(10); 18. v.push_back(40); 19. v.push_back(20); 20. v.push_back(30); 21. v.push_back(50); 22. //默认从小到大 23. sort(v.begin(), v.end()); 24. for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 25. { 26. cout << *it << " "; 27. } 28. cout << endl; 29. cout << "----------------------------" << endl; 30. //使用函数对象改变算法策略,排序从大到小 31. sort(v.begin(), v.end(), MyCompare()); 32. for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 33. { 34. cout << *it << " "; 35. } 36. cout << endl; 37. } 38. 39. int main(void) 40. { 41. test01(); 42. 43. return 0; 44. }