C ++传递由参数确定的动态数组

时间:2014-11-03 21:24:11

标签: c++ arrays variable-length-array

这个功能在这里已被问过几次,但我对特定情况感兴趣。是否可以通过附加参数定义传递的数组大小?

作为一个例子,让我们说我想要一个函数来打印2D数组。但是,我每次都可能没有相同的尺寸。如果我可以有额外的参数来定义该数组的大小,那将是理想的。我知道我可以根据需要在这里轻松切换n一个数字,但如果我有更复杂的函数和单独的头文件,每次出现不同大小的数组时,编辑头文件似乎很愚蠢。以下是error: use of parameter 'n' outside function body...的结果,我理解但希望找到一些解决方法。我也试过g++ -std=c++11,但仍然是同样的错误。

#include <iostream>
using namespace std;

void printArray(int n, int A[][n], int m) {
    for(int i=0; i < m; i++){
        for(int j=0; j<n; j++) {
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {

    int A[][3] = {
        {1,2,3},
        {4,5,6},
        {7,8,9},
        {10,11,12}
    };

    printArray(3, A, 4);

    return 0;
}

据说,这可以使用C99来完成,也可以在this question中提到,但我无法弄清楚如何使用C ++。

1 个答案:

答案 0 :(得分:3)

这有效:

template<size_t N, size_t M>
void printArray( int(&arr)[M][N] ) {
  for(int i=0; i < M; i++){
    for(int j=0; j < N; j++) {
      std::cout << A[i][j] << " ";
    }
    std::cout << std::endl;
  }
}

如果您愿意将代码放在头文件中。作为奖励,它会为您推断NM