Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数调用中进行模板递归? 模板 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 - Fatal编程技术网

如何在函数调用中进行模板递归? 模板 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只知道运行时的边界,所以这将不起作用。

如何在函数调用中进行模板递归? 模板 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以来的运行时数组

您可以选择C方式,使用普通(非模板)<代码> FUNC<代码>,它取一个指针和两个大小,或者把整个代码都扔到C++中,最好使用向量。

问题是, M< /C>和 N>代码>是运行时值,C++不能正确处理动态大小的数组类型。是的,但是,这是关于它的。你不能把一个指针传递给你的二维数组,因为C++禁止你使用类型<代码> int(*)[n] < /代码> .< 对此,有一些变通方法:

  • 自己做索引,传递一个平面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;
}