C++ 我应该在C+中使用矩阵[][max]还是**矩阵+;?

C++ 我应该在C+中使用矩阵[][max]还是**矩阵+;?,c++,pointers,matrix,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]; p=newint*[n]; 对于(int i=0;i >通常在C++中不需要你自己,并且有陷阱和障碍,在适当的标准库容器和智能指针类中处理。第一个声明是非标准的:n必须在编译时已知,才能编译代码。一些编译器提供可变长度数组作为扩展,但代码仍然是非标准的

我想用这个做起来会很容易:

int n = 4;
int matrix[n][n];
而不是:

p = new int *[n];

for (int i = 0; i < n; i++)
   p[i] = new int [n];
p=newint*[n];
对于(int i=0;i
那么,哪一个更好?何时使用**创建矩阵或数组

您的第一个例子不是C++标准一致性,标准不支持可变长度数组。
int**p=newint*[n];
对于(int i=0;i
对于第二个示例,您最好使用
std::vector
,并将矩阵行和列组织为向量中的部分:

int n = 4;
std::vector<int> matrix(n*n);
int n=4;
std::向量矩阵(n*n);

<>使用<代码>新< /COD>和 DE> >通常在C++中不需要你自己,并且有陷阱和障碍,在适当的标准库容器和智能指针类中处理。

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

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

这两种方法都允许您构造行为完全类似于数组数组的对象,但您不需要显式地管理它们的内存

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

for (int i = 0; i < n; i++)
     p[i] = new int [n];
int n = 4;
std::vector<int> matrix(n*n);