C++ 在C+中声明可变长度二维数组的正确方法+;
我想得到一个二维int数组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++是可以的,那么你可以创建一个二维向量,即向量向量。请参阅。如果使用数组语法,则不能。该语言要求您使用编译时常量来
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[]?