在C ++中初始化多维数组

时间:2014-03-31 21:42:10

标签: c++ arrays pointers dynamic multidimensional-array

我最近开始使用C ++进行编程,我在JAVA编程方面有相当多的经验,但在尝试用c ++初始化多维数组时,我面临着一个相当不清楚的情况。

我将在java中使用的代码类似于:

int x = 5;
int y = 10;

int array [][] = new int[x][y];

工作正常,我可以使用扫描仪或选项窗格为x和y分配任何值。但是(并且请耐心地说,我对c ++很新)在c ++中我需要使用常量来阻止我使用例如:

int x;
cin >> x;
int y;
cin >> y;
int array [][] = new int[x][y];

我正在尝试制作一个随机地图生成器,最终我会将3d对象分配给数组中的位置,并设计一个算法来对所有对象进行排序。但是我希望用户能够指定网格的大小,指定x和y,行和列。

非常感谢任何帮助!

非常感谢提前。

3 个答案:

答案 0 :(得分:2)

此记录

int array [][] = new int[x][y];

在C ++中无效。如果你想使用operator new在堆中分配一个数组,而右边的维度不是常量表达式那么你应该写

int x;
cin >> x;
int y;
cin >> y;

int **array = new int *[x];

for ( int i = 0; i < x; i++ ) array[i] = new int[y];

如果通过常量表达式设置了正确的维度,那么您可以编写

int x;
cin >> x;
const int y = SomeValue;

int ( *array )[y] = new int [x][y];

考虑到您可以使用标准容器std::vector而不是手动分配的数组。

例如

std::vector<std::vector<int>> v( x, std::vector<int>( y ) );

答案 1 :(得分:1)

有多种方法可以做到这一点。要在堆上创建永久数组:

int** data = new int*[x];
for(int i = 0; i < x;i++)
{
    data[i] = new int[y];
}

在堆栈上创建固定大小的数组:

int data[5][5];

答案 2 :(得分:0)

必须在编译时知道数组的大小。

对我来说,由于缺乏对数组大小的了解,这个简单的代码无法编译。

int i = 5;

int arr [] = new int[i];

arr[2] = 2;

如果你想使用数组,你有两个选择,使用编译时已知的常量,或者使用malloc创建数组来保留内存。

如果能够使用STL,请使用矢量类。

int i = 5;

vector<int> vec(i);

vec[2] = 2;

或者您可以使用“Vlad from Moscow”或“user3482801”答案中显示的指针。