有些人可能知道也可能不知道您可以使用以下代码获取函数的数组参数的大小:
template<typename DataType, size_t SIZE>
void SortingAlgorithm(DataType (&array)[SIZE])
{
...
return;
}
其中 SIZE 可用于表示数组中元素的数量,允许程序员使用您的函数将数组作为参数传递而无需显式传递长度。例如,程序员可以这样做:
SortingAlgorithm( arrayToBeSorted ); //the length is not passed here, which is fine
对于可以相对容易地以迭代方式实现的算法,这很好。但我试图用其他递归算法来做到这一点。每个人的代码可能如下所示:
template<typename DataType, size_t SIZE>
void SortingAlgorithm(DataType (&array)[SIZE])
{
DataType newArray[SIZE];
memcpy(newArray,array, SIZE); //copy to a new array
SortingAlgorithm( newArray );
...
return;
}
但是,每次说程序需要不同的参数类型,类型转换失败,并显示尝试对 newArray 数组的 SIZE 说明符进行多次类型转换时,都会引发错误,并且程序失败。但是,如果我在进行递归调用之前使用实际值来定义 newArray 的大小,它不会吐出这些错误,如下所示:
DataType newArray[10]; //arbitrary number, but the compiler accepts this.
为什么可变大小的数组会导致错误?还有无论如何要实现一个递归算法,它接受一个数组作为输入,但不需要数组的长度作为参数,因为它可以在函数调用中每次确定数组的长度?