在c++中处理多维数组长度

Handling multi-dimensional array lengths in C++

本文关键字:数组 c++ 处理      更新时间:2023-10-16

我想构建一个函数,它接受一个多维数组并像网格一样打印它。我遇到了麻烦,因为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。

否则,必须以某种方式将数组的大小传递给函数。

一种方法是使用模板,但这对动态数组不起作用(并且有点浪费,因为它为使用的每个数组大小创建了函数的副本)。另一种方法是给函数添加一个额外的参数,大小为。