假设我使用 main() 从文件中读取并占用一个二维数组int arr[S1][S2]
,其中S1
和S2
由文件确定。如果我想将此数组传递给一个函数,我怎样才能将多维数组编写为具有正确边界S1
和的函数参数S2
?
int some_function(int arr_copy[S1][S2], ...);
int main()
{
/* read file and occupy arr[S1][S2] */
}
显然上述是一个问题,因为S1
和S2
是未定义的。
假设我使用 main() 从文件中读取并占用一个二维数组int arr[S1][S2]
,其中S1
和S2
由文件确定。如果我想将此数组传递给一个函数,我怎样才能将多维数组编写为具有正确边界S1
和的函数参数S2
?
int some_function(int arr_copy[S1][S2], ...);
int main()
{
/* read file and occupy arr[S1][S2] */
}
显然上述是一个问题,因为S1
和S2
是未定义的。
显而易见的解决方案是编写一个基于 Matrix 的类
std::vector
,并使用它。然后,您将声明该函数以获取(可能const
)对矩阵的引用,并完成它。它比任何替代品都容易得多,而且更安全。
如果你真的坚持在 中使用 C 风格的数组main
,那么你可以将函数定义为模板:
template <size_t S1, size_t S2>
int
some_function( int const (&array)[S1][S2], ...) ...
编译器将根据您传递的数组的声明S1
确定实际值。S2
如果您必须传递一个数组,那么该函数应该接受一个int*
和两个参数作为边界。最好为数组使用容器类,通过引用(或常量引用)传递。
编辑:对于所有这些,请按照 James 对模板的建议进行操作。:-)