将对数组的引用传递给返回对数组的引用的函数

passing a reference to an array TO a function THAT returns a reference to an array

本文关键字:数组 引用 返回 函数      更新时间:2023-10-16

我基本上试过这个:

#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;
}  

但是,编译器抱怨,它抱怨的第一件事是数组没有绑定,但是,这不是一个一维数组吗?所以,我认为这是可能的,它抱怨的下一件事是,对sort(array)的调用与任何重载函数都不匹配,所以我认为我的语法不正确。那么,如何声明一个接受对数组的引用的函数,该函数返回对数组的引用?

您必须提及模板参数(或使用 auto)。未知边界数组不能是函数参数(指针调整情况除外)。

template<typename T, size_t N>
auto sort( T(&x)[N] ) -> T(&)[N]
{
return x;
}

请注意,像"sort"这样的算法接收迭代器对(或视图)是更正常的样式;这样调用者可以很容易地决定对数组的子集进行排序。

这里有一种方法:

#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;
}
}
}
}