sort()的自定义比较函数无需参数即可工作(C ++)

时间:2018-09-23 13:01:02

标签: c++

为什么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;
}

谢谢

2 个答案:

答案 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);