我想构建一个采用多维数组并像网格一样打印它的函数。我遇到了麻烦,因为除非你指定它的长度,否则c ++不允许函数有多维数组参数。这里有一个问题,使用向量来回答。我还没有学会如何使用矢量,所以请不要在答案中使用它们,或者如果你这样做,至少提供一个很好的教程。
无论如何,我想知道是否有可能在c ++中返回一个数组...我开始用javascript编程,所以我想到的第一个解决方案就是做
int gen(int len){
return int arr(int a[][len]){
cout << a[0][0];
};
}
我知道它不起作用,尝试过它,并且当它没有时并不感到惊讶。有没有办法做这样的事情呢?
答案 0 :(得分:2)
在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])
{ ... }
此模式将在内部为每个不同大小的数组创建一个唯一函数。它易于使用,但可能会增加代码大小。
答案 1 :(得分:1)
你必须知道数组的大小,没有办法解决它。 std::vector
是解决此问题的正确方法,您可以找到一个好的参考here。这允许仅传递向量,因为它知道它自己的长度并且函数可以询问它,使其类似于您从Javascript习惯的那些。
否则,必须以这种或那种方式将数组的大小传递给函数。
一种方法是使用模板,但这对动态数组不起作用(并且有点浪费,因为它会为每个使用的数组大小创建一个函数副本)。另一个是向函数添加一个额外的参数,大小。