我基本上试过这个:
#include <iostream>
int(&sort(int(&array)[]))[];
double(&sort(double(&array)[]))[];
char(&sort(char(&array)[]))[];
int main(){
int array[]{23, 44, 53, 65, 87, 1, 2, 0, 9};
sort(array);
}
int(&sort(int(&array)[]))[]{
std::cout<<"Function is entered, just for test"<<std::endl;
}
但是,编译器抱怨说,它抱怨的第一件事是数组没有绑定,但是,这不是一维数组吗?所以,我认为有可能,它抱怨的下一件事是,对排序(数组)的调用没有匹配任何重载函数,所以我认为我的语法不正确。那么,我如何声明一个函数来接受对返回数组引用的数组的引用?
答案 0 :(得分:1)
您必须提及模板参数(或使用自动)。未知边界的数组不能是函数参数(指针调整情况除外)。
template<typename T, size_t N>
auto sort( T(&x)[N] ) -> T(&)[N]
{
return x;
}
请注意,对于诸如&#34; sort&#34;之类的算法,它是更常规的样式。接收迭代器对(或视图);这样调用者可以轻松地决定对数组的子集进行排序。
答案 1 :(得分:0)
以这种方式:
#include <iostream>
auto sort(int(&array)[10])->int(&)[10];
int main(void){
int array[10]{2, 34, 1, 7, 0, 12, 11, 15, 22, 8};
sort(array);
for(auto x: array){
std::cout<<"The number is: "<<x<<std::endl;
}
}
auto sort(int(&array)[10])->int(&)[10]{
for(int i{0}; i< 10; i++){
for(int j{0}; j < 10; j++){
if(array[j]> array[i]){
int temp{array[i]};
array[i] = array[j];
array[j] = temp;
}
}
}
}