问题描述
我在Array类中具有排序功能,并且想要实现类似python sort(reverse=True)
的功能。我想向用户展示他们可以传递此参数,因为现在arr.bubble_sort(true);
(检查代码)没有太大意义。我不希望lambda函数知道如何实现此目标。
任何其他方法也都可以使用,因为我知道c ++中可能不存在命名参数。
PS:顺便说一句,我已经超载了。
问候
// inside class Array
void bubble_sort(bool rev){ //overloaded bubble_sort
if(rev){
int i,j;
for(i=0; i<size-1; i++){
for(j=0; j<size-i-1; j++){
if(arr[j] < arr[j+1]){
std::swap(arr[j],arr[j+1]);
}
}
}
}
else{
int i,j;
for(i=0; i<size-1; i++){
for(j=0; j<size-i-1; j++){
if(arr[j] > arr[j+1]){
std::swap(arr[j],arr[j+1]);
}
}
}
}
}
int main()
{
int n;
std::cin >> n;
Array arr(n); // parameterized constructor initializing array of size n
arr.bubble_sort(true);
arr.print();
return 0;
}
解决方法
只需提供以下重载:
void bubble_sort(std::function<bool<int,int>> cmp) {
...
if(cmp(arr[j],arr[j+1])){
std::swap(arr[j],arr[j+1]);
}
...
}
void bubble_sort(bool rev = false)
{
bubble_sort(rev ? std::greater<int>{} : std::less<int>{});
}
请注意,在c ++中,静态语言是静态类型的语言,因此可以按参数类型区分重载。