如何在C++中声明动态二维整数数组
How to declare dynamic 2D integer array in C++
我有一个要求,我需要从用户那里获取输入,并根据数组的输入长度来决定。例如
int row, column;
cin>> row>>column;
int matrix[row][column];
但是int matrix[row][column]
不起作用,因为编译器给出错误说
"Expression must have a constant value"
另外,如果有人可以指导我如何将matrix[row][column]
地址分配给指针。我知道如何使用静态数组而不是动态数组来做到这一点。
要声明 2d 动态数组,您将需要指针的指针
int row, column;
cin>> row>>column;
int** matrix = new int*[row];
for(int i = 0; i < row; ++i)
matrix[i] = new int[column];
这是因为数组在 c++ 中是静态的,并且在内存中占据固定位置。假设数组有 1000 个元素。 当您声明静态数组时,这意味着内存中有 1000 个位置彼此为数组保留。如果你想在数组中添加更多的项目,你会在保留数组的末尾添加这个项目,但如果该位置有一些数组以外的数据,这些数据将被删除!!
但是当你把它声明为指针时,你不会存储嵌套在内存中的元素,而是将它们存储在不同的位置,每个位置都存储在指针数组中,当你向数组添加新元素时,编译器会在内存中搜索空位置,并将新元素存储在那里。
使用 2D 数组来保存矩阵是一个坏主意 - 特别是因为内存分配的循环。使用大小行 * 列的 1D 数组并使用 y * 列+x 访问元素,并将其存储在内部并unique_ptr以避免公共内存管理问题。
这是我的建议:
uint32_t rows, cols;
std::cin >> rows >> cols; // Check rows and cols are actually numbers
std::unique_ptr<int[]> matrix(new int[rows*cols]);
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 元素在二维数组 c++ 中的出现次数
- 执行 c++ 二维数组
- C++ 中的二维数组初始化为一个值
- 在C++中初始化第一维大小未知的二维数组
- 如何在二维数组中存储值?