使用输入值创建二维数组的大小

Creating bidimensional array's size with the input values

本文关键字:二维数组 创建 输入      更新时间:2023-10-16

首先,新年快乐!

所以,我想问一下,我是否可以使用一些输入值作为二维数组的大小,例如:

我想知道,如果不是这样做:

const int N = 10;
const int M = 10;
typedef int IntMatrix[N][M];

假设这将是我可以创建的数组的最大大小,但随后用户输入该大小必须为5x5。我知道我可以在做事情时使用5x5作为限制,但我可以这样做吗,但使用输入值作为矩阵的维度?类似于:

cin >> N >> M;

然后将其用作每个维度的最大大小。谢谢你的帮助!

否。数组的大小必须在编译时已知,而不能在运行时确定,例如本教程中所述。因此,数组的大小不能依赖于用户输入。

您可以做的是动态分配一个数组,并将其地址存储在指针中。动态数组的大小可以在运行时确定。然而,存在一个问题。在运行时,可以仅确定动态分配的2D阵列的最外维度。你有两个选项:要么分配一个NxM大小的平面数组,其中的行一个接一个地连续存储,要么使用数学计算索引。或者,使用指针数组,并将每个指针分配给动态分配的数组列。第一种选择更有效。

还有一个问题。动态内存管理很难,即使你知道自己在做什么,手动管理也不是一个好主意。如果你不这样做,那就更少了。标准库中有一个容器类,负责动态数组的内存管理。它是std::vector。当您需要动态数组时,请始终使用它。您的选择保持相似。使用一个平面的NxM大小的矢量,或者使用一个矢量的矢量。

应该动态分配数组n,因为在编译时应该知道数组大小。你可以这样做:

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;