简单仿函数(补上一条未说完的仿函数)
作者:
Dionysus.
,
2022-02-26 23:50:50
,
所有人可见
,
阅读 214
在一次做题的时候碰到运算符重载,然后查资料到仿函数,然后找半天看了底层实现(就以sort为例,其他的仿函数都是一个意思)
int a[N];
sort(a,a + N)//升序
sort(a,a + N,greater<int>())//加上这个仿函数之后就降序了,greater<int>后面的那一个()是为了提醒调用的是这个重载运算符
//而greater<int>手动实现的话,只要定义一个只重载操作符的类便可
struct _greater
{
bool operator () (int a,int b)//因为这里数据类型都没有加上const,因此这个函数也无需加上const
{
return a > b;
}
};
//在使用仿函数的时候,有两种方式
//当仿函数的这个类没有被实例化的时候,只是当作一种数据类型的时候,要带上(),而当其已经完成了赋值,便无需带上(),还有一种不用的()的情况便是直接作为数据类型实例化创建变量,而不是赋值赋予的时候无需()
(1)auto pr = greaer<int>();
(2)greater<int> pr;//然后在使用的过程中用pr便可,注意这里无需pr(),因为当实例化了之后,便确定了pr就是一个仿函数
//总的来说仿函数只是在stl或者sort底层源码中最后在那判断那一步起作用,然后再通过bool值来影响判断真假,从而达到改变排序的目的
//greater<int>的底层是用模板类来实现的,所以greater<int>更加灵活和适用性广