我应该在C ++中使用matrix [] [max]或**矩阵吗?

时间:2016-03-28 11:10:30

标签: c++ pointers matrix

我认为这样做很容易:

int n = 4;
int matrix[n][n];

而不是:

p = new int *[n];

for (int i = 0; i < n; i++)
   p[i] = new int [n];

那么哪个更好?我们什么时候使用**来创建矩阵或数组?

2 个答案:

答案 0 :(得分:1)

int n = 4;
int matrix[n][n];

您的第一个示例不符合c ++标准,该标准不支持可变长度数组。

int** p = new int *[n];

for (int i = 0; i < n; i++)
     p[i] = new int [n];

对于您的第二个示例,您应该更好地使用std::vector<int>,并将矩阵行和列组织为向量中的部分:

int n = 4;
std::vector<int> matrix(n*n);

在C ++中通常不需要自己使用newdelete,并且会遇到陷阱和障碍,这些陷阱和障碍在适当的标准库容器和智能指针类中得到了解决。

答案 1 :(得分:1)

第一个声明是非标准的:在编译时必须知道n才能编译代码。有些编译器提供可变长度数组作为扩展,但代码仍然是非标准的。

当您需要C ++中的矩阵时,标准方法是在运行时直到 知道大小的情况下使用std::vector<std::vector<T>>。如果在编译时知道大小并且您更喜欢在自动区域中进行分配,请使用std::array<N,std::array<N,T>>而不是向量。

这两种方法都可以让你构建与数组数组完全相同的对象,但是你不需要明确地管理它们的内存。

相关问题