我想获得一个arr
可以通过 arr[i][j] 访问的二维 int 数组。
据我了解,我可以声明int arr[10][15];
获得这样的数组。然而,在我的情况下,大小是可变的,据我所知,如果数组的大小不是硬编码的,但我使用像int arr[sizeX][sizeY]
.
最好的解决方法是什么?
我想获得一个arr
可以通过 arr[i][j] 访问的二维 int 数组。
据我了解,我可以声明int arr[10][15];
获得这样的数组。然而,在我的情况下,大小是可变的,据我所知,如果数组的大小不是硬编码的,但我使用像int arr[sizeX][sizeY]
.
最好的解决方法是什么?
如果您不想使用 a std::vector
of 向量(或新的 C++11 std::array
),则必须手动分配所有子数组:
int **arr = new int* [sizeX];
for (int i = 0; i < sizeX; i++)
arr[i] = new int[sizeY];
当然,完成后不要忘记delete[]
所有。
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;
}
如果您正在寻找 C 中的解决方案,请参阅此 Stack Overflow 线程: 如何在 C 中使用动态多维数组?.
如果 C++ 没问题,那么您可以创建一个 2D 向量,即向量的向量。见http://www.cplusplus.com/forum/general/833/。
你不能,用数组语法。该语言要求您使用编译时常量来创建数组。
C++ 没有可变长度数组。您可以考虑使用vector<vector<int> >
. 也可以使用arr[i][j]
.
正如fefe所说,您可以使用向量的向量,例如:
#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;
}