使用输入值创建二维数组的大小
Creating bidimensional array's size with the input values
首先,新年快乐!
所以,我想问一下,我是否可以使用一些输入值作为二维数组的大小,例如:
我想知道,如果不是这样做:
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;
相关文章:
- 创建 std::string 的二维数组的最佳做法
- 在创建动态二维数组时,在A[i*c+j]中使用c有什么用,即c代表什么
- 如何在C++中创建二维数组的数组
- C++基于用户输入字符串长度创建二维数组
- 如何在 C++ 中的堆上创建二维数组
- 动态创建具有默认值的二维数组C++
- 如何在C++中创建给定大小的二维数组
- 如何为二维数组创建类
- C++:创建结构的二维数组
- 如何创建一个一维数组来容纳几个二维数组
- 创建二维数组
- 如何为抽象类创建二维数组
- 创建结构的二维数组会导致崩溃
- 用C++创建二维数组,并在MATLAB中使用
- 使用输入值创建二维数组的大小
- 如何在C++中创建动态二维数组
- 正在创建类的二维数组
- 用双指针创建的C++二维数组
- 为什么在尝试用c++创建二维数组时会出现此错误
- 使用二维数组创建矩阵