【发布时间】:2020-08-16 09:30:47
【问题描述】:
我尝试了解 C++ 中仿函数和函数的使用
请看下面的代码
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
bool mySort(int a, int b){
if(a > b) return true;
return false;
}
class myClass{
public:
bool operator()(int a, int b){
if(a>b) return true;
return false;
}
};
int main(){
//(1) priority_queue<int, vector<int>, greater<int>> aa;
//(2) priority_queue<int, vector<int>, greater<int>()> bb;
//(3) priority_queue<int, vector<int>, myClass> cc;
//(4) priority_queue<int, vector<int>, mySort> dd;
vector<int> check={1,2,3,4,5,6,7};
//(a) sort(check.begin(), check.end(), mySort);
//(b) sort(check.begin(), check.end(), myClass);
//(c) sort(check.begin(), check.end(), myClass());
return 0;
}
我发现只有 (1),(3) 和 (a),(c) 有效。
使用sort和priority_queue时function和functor有什么区别?
我知道仿函数可以保持其状态,但在这种情况下,此信息不相关。
我也查了sort和priority_queue,但没看懂。
你能帮帮我吗?
【问题讨论】:
-
不是错误,但
return a > b;是您在这些功能中所需要的。 -
mySort不是排序,而是比较。 -
greater<int>是一个类型,greater<int>()是一个函数类型(函数不接受返回greater<int>的参数)或实例,具体取决于上下文。所以区别主要在int,int(),42之间。 -
提示:
using namespace std;是一个不好养成的习惯,如果你现在可以停下来,将来可能会避免很多麻烦。std::前缀的存在是有原因的:它避免与您自己的类、结构和变量发生冲突。 -
@tadman 你的话很有帮助,因为我是新手。非常感谢!
标签: c++ function templates functor