如何在函数调用中进行模板递归? 模板 int func(int(&grid)[size_x][size_y],int s_x,int x) { 如果(s_x==x) 返回0; 否则{ cout>M>>N; int grid[M][N]={}; cin>>x>>y; x--; y--; for(int i=0;i网格[i][j]; } } int time_r=func(网格,s_x,x); CUT< P>这是C99 VLAS和C++模板的奇特混合。模板期望在编译时已知边界的数组,而VLA只知道运行时的边界,所以这将不起作用。
您可以选择C方式,使用普通(非模板)<代码> FUNC<代码>,它取一个指针和两个大小,或者把整个代码都扔到C++中,最好使用向量。 问题是,如何在函数调用中进行模板递归? 模板 int func(int(&grid)[size_x][size_y],int s_x,int x) { 如果(s_x==x) 返回0; 否则{ cout>M>>N; int grid[M][N]={}; cin>>x>>y; x--; y--; for(int i=0;i网格[i][j]; } } int time_r=func(网格,s_x,x); CUT< P>这是C99 VLAS和C++模板的奇特混合。模板期望在编译时已知边界的数组,而VLA只知道运行时的边界,所以这将不起作用。,c++,recursion,C++,Recursion,您可以选择C方式,使用普通(非模板) FUNC,它取一个指针和两个大小,或者把整个代码都扔到C++中,最好使用向量。 问题是, M< /C>和 N>代码>是运行时值,C++不能正确处理动态大小的数组类型。是的,但是,这是关于它的。你不能把一个指针传递给你的二维数组,因为C++禁止你使用类型 int(*)[n] < /代码> .< 对此,有一些变通方法: 自己做索引,传递一个平面1D数组 使用指针数组,以便所有指针数组本身都是1D数组 使用向量的向量 回到C,它可以轻松处理C99以来的运行时数组
- 自己做索引,传递一个平面1D数组
- 使用指针数组,以便所有指针数组本身都是1D数组
- 使用向量的向量
- 回到C,它可以轻松处理C99以来的运行时数组大小
template <size_t size_x, size_t size_y>
int func(int(&grid)[size_x][size_y], int s_x, int x)
{
if (s_x == x)
return 0;
else {
cout << grid[s_x][0] << " " << x << endl;
s_x++;
return func(grid, s_x, x);
}
}
int main()
{
int T;
cin >> T;
while (T > 0) {
int M, N, x, y, s_x = 0, s_y = 0;
cin >> M >> N;
int grid[M][N] = {};
cin >> x >> y;
x--;
y--;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cin >> grid[i][j];
}
}
int time_r = func(grid, s_x, x);
cout << time << endl;
T--;
}
return 0;
}