我认为这样做很容易:
int n = 4;
int matrix[n][n];
而不是:
p = new int *[n];
for (int i = 0; i < n; i++)
p[i] = new int [n];
那么哪个更好?我们什么时候使用**来创建矩阵或数组?
答案 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 ++中通常不需要自己使用new
和delete
,并且会遇到陷阱和障碍,这些陷阱和障碍在适当的标准库容器和智能指针类中得到了解决。
答案 1 :(得分:1)
第一个声明是非标准的:在编译时必须知道n
才能编译代码。有些编译器提供可变长度数组作为扩展,但代码仍然是非标准的。
当您需要C ++中的矩阵时,标准方法是在运行时直到 知道大小的情况下使用std::vector<std::vector<T>>
。如果在编译时知道大小并且您更喜欢在自动区域中进行分配,请使用std::array<N,std::array<N,T>>
而不是向量。
这两种方法都可以让你构建与数组数组完全相同的对象,但是你不需要明确地管理它们的内存。