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

时间:2018-03-13 14:31:19

标签: c++ arrays reference c++14

我基本上试过这个:

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

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

2 个答案:

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

}