gen*_*gen 1 c++ arrays memory-management multidimensional-array
当我从用户那里读取一些值并且我需要创建一个特定大小的数组时,我会这样做:
#include <iostream>
using namespace std;
unsigned* numbers;
int main()
{
int a;
cin >> a;
numbers = new unsigned[a];
}
Run Code Online (Sandbox Code Playgroud)
如何使用2d数组(从用户读取大小a*b)?
如果a和b分别是行数和列数,则可以像这样分配数组:
new unsigned[a * b];
Run Code Online (Sandbox Code Playgroud)
要访问行i和列的元素j,请执行以下操作:
numbers[i * b + j]
Run Code Online (Sandbox Code Playgroud)
然而,请注意,实际上你几乎肯定会更好地使用std::vector任何你想做的事情,但你可能还没有学到这一点:)
在代码中看起来像2D数组的任何东西都不是内存中的物理2D数组,而是一个普通的内存块或分散的,这取决于你如何分配它.
Brennan Vincent的回答建议分配一个包含*b元素的动态数组,它会在内存中为你提供一个连续的块.将其与std::vector他提到的内置动态内存管理相结合并感到高兴:
std::vector<unsigned> matrix(a*b);
如果您希望矩阵方便访问,请将整个事物包装到一个类中,使您可以访问具有2D坐标的元素.但请远离自己管理内存.它只会伤害你和任何必须维护该代码(并搜索内存泄漏)的人.