我最近开始使用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,行和列。
非常感谢任何帮助!
非常感谢提前。
答案 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”答案中显示的指针。