C++ sort()的自定义比较函数不带参数(c+;+;)

C++ sort()的自定义比较函数不带参数(c+;+;),c++,C++,为什么sort()的自定义比较函数在没有参数的情况下工作(c++) void显示(int a[] { cout它不能“在没有参数的情况下工作”。您正在传递一个指向函数的指针。std::sort然后将调用它(带参数)根据需要对范围进行排序。如果您阅读函数文档,它会指出函数的第三个参数可以是函数指针或函数对象 它类似于以下代码: bool (*fPointer)(int, int) = compare; // Assign the function address to pointer sort(a

为什么sort()的自定义比较函数在没有参数的情况下工作(c++)

void显示(int a[]
{
cout它不能“在没有参数的情况下工作”。您正在传递一个指向函数的指针。
std::sort
然后将调用它(带参数)根据需要对范围进行排序。

如果您阅读函数文档,它会指出函数的第三个参数可以是函数指针或函数对象

它类似于以下代码:

bool (*fPointer)(int, int) = compare; // Assign the function address to pointer
sort(a,a+10,fPointer);
我们甚至可以使用C++11 lambda函数来完成这项工作:

sort(a, a+10, [](int a, int b) { return a > b; } );

正如预期的那样,我看到比较函数有两个参数。它们被称为
a
b
,它们都是
int
s。您将指针传递到该函数,然后
std::sort
将使用正确的参数调用您的函数。按排序使用比较,它将使用所需的参数调用它。如果您调用它包含参数您将使用什么参数?这并不能解决问题,但您真的需要
std::endl
所做的额外工作吗?
'\n'
结束一行。它在代码块中工作得非常好。@PrabalAggarwal您误解了。是的,代码可以工作-我从来没有说过它不工作。但是您的代码从来都没有带来乐趣没有参数的操作。
sort(a,a+10,compare);
没有调用函数。它正在传递函数指针。
std::sort
通过该指针在内部调用函数,并且它确实传递参数。
sort(a, a+10, [](int a, int b) { return a > b; } );