C++ 中的动态多维数组
Dynamic Multidimensional Array in C++
程序应该取一个维度 n 并创建一个 nxn 维度的多维数组,我知道它必须用 new[ ] 运算符来完成,因此应该这样做使用指针,我在互联网上找到了很多方法,但我是这个主题的新手,不能很好地理解它们是如何工作的,这是我发现的声称有效的代码之一:
main()
{
double n;
cout<<"Enter the n dimension to the matrix[nxn]: ";
cin>>n;
matrix=new int*[n];
int *data=new int[n*n];
for(i=0;i<n;i++)
matrix[i]=&data[i*n];
}
我的问题是:这段代码正确吗?如果是这样,它是如何工作的?否则,哪个代码有效? (如果可以的话,我会很感激)
动态分配的正确方法是这样的(如果只涉及数组):
matrix = new int*[n]; //create an array of 'n' pointers
for(int i = 0;i < n;i++)
matrix[i] = new int[n]; //allocate memory equivalent of 'n' ints to each of the 'n' pointers
你不应该使用原始指针,最好使用 std::vector
。
#include <iostream>
#include <vector>
int main() {
int n;
std::cin << n;
std::vector<std::vector<int>> matrix(n, std::vector<int>(n));
// Do whatever with matrix
return 0;
}
程序应该取一个维度 n 并创建一个 nxn 维度的多维数组,我知道它必须用 new[ ] 运算符来完成,因此应该这样做使用指针,我在互联网上找到了很多方法,但我是这个主题的新手,不能很好地理解它们是如何工作的,这是我发现的声称有效的代码之一:
main()
{
double n;
cout<<"Enter the n dimension to the matrix[nxn]: ";
cin>>n;
matrix=new int*[n];
int *data=new int[n*n];
for(i=0;i<n;i++)
matrix[i]=&data[i*n];
}
我的问题是:这段代码正确吗?如果是这样,它是如何工作的?否则,哪个代码有效? (如果可以的话,我会很感激)
动态分配的正确方法是这样的(如果只涉及数组):
matrix = new int*[n]; //create an array of 'n' pointers
for(int i = 0;i < n;i++)
matrix[i] = new int[n]; //allocate memory equivalent of 'n' ints to each of the 'n' pointers
你不应该使用原始指针,最好使用 std::vector
。
#include <iostream>
#include <vector>
int main() {
int n;
std::cin << n;
std::vector<std::vector<int>> matrix(n, std::vector<int>(n));
// Do whatever with matrix
return 0;
}