首先,新年快乐!
所以,我想问一下我是否可以使用一些输入值作为二维数组的大小,例如:
我想知道,如果不是这样做的话:
const int N = 10;
const int M = 10;
typedef int IntMatrix[N][M];
假设这是我可以创建的数组的最大大小,但是用户输入的大小必须大小为5x5。我知道我可以在做东西时使用5x5作为限制,但是我可以这样做,但是使用输入值作为Matrix的维度吗? 类似的东西:
cin >> N >> M;
然后将其用作每个维度的MAX大小。 谢谢你的帮助!
答案 0 :(得分:0)
没有。数组的大小必须在编译时知道,并且无法在运行时确定,例如this tutorial中所述。因此,数组的大小不能取决于用户输入。
您可以做的是动态分配数组并将其存储在指针中。动态数组的大小可以是determined at runtime。但是,有一个问题。仅可以在运行时确定动态分配的2D阵列的最外层维度。您有两个选项:要么分配一个大小为NxM的平面数组,其中行一个接一个地连续存储,并使用数学计算索引。或者,使用指针数组并将每个指针分配给动态分配的数组列。第一种选择更有效。
还有另一个问题。动态内存管理很难,即使您知道自己在做什么,手动操作也绝不是一个好主意。如果你不这样做,那就更少了。标准库中有一个容器类,负责动态数组的内存管理。它是std::vector
。在需要动态数组时始终使用它。您的选择保持相似。使用平面,NxM尺寸矢量或矢量矢量。
答案 1 :(得分:0)
应该动态分配数组,因为数组大小应该在编译时知道。你可以这样做:
int N,M; // Dimensions
int** intMatrix; // Array of array
std::cin << N << M;
intMatrix = new int*[N]; // Allocate N the row
for(int i=0; i<N; i++){
intMatrix[i] = new int[M]; // For each row, allocate the col
}
// aaaand don't forget to free memory like this:
for(int i=0; i<N; i++){
delete [] intMatrix[i];
}
delete [] intMatrix;