在c ++中通过引用传递未知大小的数组

时间:2014-03-10 11:53:02

标签: c++ arrays merge

我有4个排序的整数数组,我正在尝试合并到一个巨大的排序数组中。

我将A和B合并在一起,这给了我另一个名为X的int数组 然后我将C和D合并在一起,这给了我另一个名为Y的int数组 最后,我将X和Y合并在一起得到Z,这是最终产品。

每次合并函数都完全相同,只是将结果存储到我希望通过引用传入的不同数组中。

我想做这样的事情:

void mergeSort(int arr1[], int arr2, int &result[]){
    ...
}

但我收到错误“不允许引用数组”。这样做的最佳方式是什么?

4 个答案:

答案 0 :(得分:4)

在C ++中通过引用传递数组的语法是

int (&result)[size]

请注意,您需要在编译时知道size。这可能不是你想要做的,我建议使用vector<int>

答案 1 :(得分:1)

你不能用这样的方式编写函数,因为数组即使它们具有相同类型但具有不同大小的元素也是不同的类型。

您需要编写模板函数

例如

template <size_t N1, size_t N2>

void mergeSort( int ( &arr1 )[N1], int ( &arr2 )[N2], int ( &result )[N1+N2])
{
    ...
}

否则您需要传递给数组的函数大小。例如

void mergeSort( int arr1[], size_t n1, int arr2[], size_t n2, int result[])
{
    ...
}

在这种情况下,假设数组结果的大小至少不小于n1 + n2。

答案 2 :(得分:0)

void mergeSort( int *arr1, int *arr2, int sizeOfArray, int *result[] )
{
...
}

答案 3 :(得分:0)

我认为上面的答案可以为您提供比您正在做的更好的解决方案。但是如果你绝对坚持使用数组(通过引用并希望保留“未指定”的大小),请执行以下操作:

template <unsigned int SIZE> void mergeSort(int arr1[], int arr2, int (&result)[SIZE]){
}

然后你可以将任何大小的数组传递给它,模板参数推导过程将在编译时计算出大小。 请注意,如果您的实现支持VLA,则不适用于VLA。