C++ 在C+中声明可变长度二维数组的正确方法+;

C++ 在C+中声明可变长度二维数组的正确方法+;,c++,arrays,multidimensional-array,dynamic-sizing,C++,Arrays,Multidimensional Array,Dynamic Sizing,我想得到一个二维int数组arr,我可以通过arr[I][j]访问它 据我所知,我可以声明int-arr[10][15]以获取这样的数组。 然而,在我的例子中,大小是可变的,据我所知,如果数组的大小不是硬编码的,但我使用了一个变量,如int-arr[sizeX][sizeY],则该语法不起作用 最好的解决方法是什么?如果您正在寻找C语言的解决方案,请参阅以下堆栈溢出线程: 如果C++是可以的,那么你可以创建一个二维向量,即向量向量。请参阅。如果使用数组语法,则不能。该语言要求您使用编译时常量来

我想得到一个二维int数组
arr
,我可以通过arr[I][j]访问它

据我所知,我可以声明
int-arr[10][15]
以获取这样的数组。 然而,在我的例子中,大小是可变的,据我所知,如果数组的大小不是硬编码的,但我使用了一个变量,如
int-arr[sizeX][sizeY]
,则该语法不起作用


最好的解决方法是什么?

如果您正在寻找C语言的解决方案,请参阅以下堆栈溢出线程:


<>如果C++是可以的,那么你可以创建一个二维向量,即向量向量。请参阅。

如果使用数组语法,则不能。该语言要求您使用编译时常量来创建数组。

如果您不想使用一组向量(或新的C++11),则必须手动分配所有子数组:

int **arr = new int* [sizeX];
for (int i = 0; i < sizeX; i++)
    arr[i] = new int[sizeY];
int**arr=newint*[sizeX];
对于(int i=0;i

当然,完成后不要忘记删除[]
所有。

C++没有可变长度数组。可以考虑使用<代码>矢量< /代码>。也可以使用
arr[i][j]

c/c++不支持多维数组来访问它。但它确实支持数组的数组:

    //simulate 2-dimension array with 1-dimension array
    {
        int x = 20;
        int y = 40;
        int * ar = new int(x*y);
        int idx_x =9;
        int idx_y=12;
        ar[idx_x + idx_y * x] = 23;
    }
    //simulate 2-dimension array with array of array
    {
        int x = 20;
        int y = 40;
        int**ar = new int*[y];
        for(int i = 0; i< y; ++i)
        {
            ar[i] = new int[x];
        }
        ar[9][12] = 0;      
    }
//用一维数组模拟二维数组
{
int x=20;
int y=40;
int*ar=新的int(x*y);
int idx_x=9;
int idx_y=12;
ar[idx_x+idx_y*x]=23;
}
//用数组的数组模拟二维数组
{
int x=20;
int y=40;
整数**ar=新整数*[y];
对于(int i=0;i
正如菲菲所说,你可以使用向量的向量,e。g、 :

#include<iostream>
#include<vector>
using namespace std;

int main()
{
        vector< vector<int> > vec;
        vector<int> row1;
        row1.push_back(1);
        row1.push_back(2);
        vector<int> row2;
        row2.push_back(3);
        row2.push_back(4);

        vec.push_back(row1);
        vec.push_back(row2);

        for( int ix = 0; ix < 2; ++ix)
            for( int jx = 0; jx < 2; ++jx)
                cout << "[" << ix << ", " << jx << "] = " << vec[ix][jx] << endl;

}
#包括
#包括
使用名称空间std;
int main()
{
向量vec;
向量行1;
第1行。推回(1);
第1行。推回(2);
矢量row2;
第2行。推回(3);
第2行。推回(4);
向量推回(第1行);
向量推回(第2行);
对于(int-ix=0;ix<2;++ix)
对于(int jx=0;jx<2;++jx)

您的问题是C,但是您的标签表示C++。请您澄清一下,也就是说,使用变量来确定数组的大小不是有效的语法,除非<>代码> SZEX 和 Ssie> <代码>是<代码> const < /C>。但是,GCC(或G+)除非您向他们传递
-ansi
-pedantic
标志,否则支持此功能。我仍然建议不要使用它,因为它不是标准的C/C++。您可以使用
int**
(或任何您想要的类型)。一旦您正确使用
malloc()
ed it,您可以使用两个下标运算符访问元素。@Chris Parton:这不是数组语法。它使用指针和新的来模拟动态大小的数组。我从来没有说过:)我只是想指出,他可以像多维数组一样使用指针访问元素。要最后,语法是一样的;但我同意使用那样的指针不是数组语法。@一些程序员知道如何删除它?这种方式是真的吗?delete[]arr[]?