这个功能在这里已被问过几次,但我对特定情况感兴趣。是否可以通过附加参数定义传递的数组大小?
作为一个例子,让我们说我想要一个函数来打印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 ++。
答案 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;
}
}
如果您愿意将代码放在头文件中。作为奖励,它会为您推断N
和M
。