为什么sort()的自定义比较函数不带参数(c ++)即可工作?
void show(int a[])
{
cout<<endl;
for(int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
}
bool compare(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={12,32,45,22,643,53,53,32,4,32};
sort(a,a+10,compare);
show(a);
return 0;
}
谢谢
答案 0 :(得分:3)
它不是“没有参数就可以工作”。您正在传递std::sort
指向该函数的指针。 std::sort
然后会根据需要调用它(带有和参数)以对范围进行排序。
答案 1 :(得分:0)
如果您阅读了std::sort函数文档,它说该函数的第三个参数可以是函数指针或函数对象。
它类似于下面的代码:
strcmp
我们甚至可以使用C ++ 11 lambda函数来完成此工作:
bool (*fPointer)(int, int) = compare; // Assign the function address to pointer
sort(a,a+10,fPointer);