我想构建一个函数,它接受一个多维数组并像网格一样打印它。我遇到了麻烦,因为c++不允许一个函数有一个多维数组参数,除非你指定它的长度。这里有一个关于它的问题,可以用向量来回答。我还没有学会如何使用矢量,所以请不要在答案中使用它们,或者至少提供一个很好的教程,如果你这样做了。
无论如何,我想知道是否有可能在c++中返回一个数组…我开始用javascript编程,所以我想到的第一个解决方案是做一些像
这样的事情。int gen(int len){
return int arr(int a[][len]){
cout << a[0][0];
};
}
我知道这行不通,试过了,当它失败时并不感到惊讶。有办法做到这一点吗?
在c++中可以通过引用传递数组。通过将数组设置为template
,可以在函数中接收任何长度。例如,
template<size_t SIZE1>
void print (int (&arr)[SIZE1])
{ ... }
template<size_t SIZE1, size_t SIZE2>
void print (int (&arr)[SIZE1][SIZE2])
{ ... }
template<size_t SIZE1, size_t SIZE2, size_t SIZE3>
void print (int (&arr)[SIZE1][SIZE2][SIZE3])
{ ... }
该模式将在内部为每个不同大小的数组创建一个独特的函数。它提供了易用性,但可能会增加代码大小。
你必须知道数组的大小,这是没有办法的。std::vector
是解决这个问题的正确方法,你可以在这里找到一个很好的参考。这只允许传递向量,因为它知道自己的长度,函数可以问它,使它类似于你习惯从Javascript。
否则,必须以某种方式将数组的大小传递给函数。
一种方法是使用模板,但这对动态数组不起作用(并且有点浪费,因为它为使用的每个数组大小创建了函数的副本)。另一种方法是给函数添加一个额外的参数,大小为。