我在动态创建 ND 阵列时遇到问题。 例如:
int **A = 0;
A = new int *[rowsA];
for (int i=0;i<rowsA;i++) {
A[i] = new int[columnsA];
for(int j=0;j<columnsA;j++) {
cout << "Enter " << "(" << i << "," << j << "): ";
cin >> A[i][j];
}
}
并传递给函数,例如:print_matrix(&A[0][0],rowsA,columnsA);
void print_matrix(int *A, int x, int y) {
for (int i=0;i<x;i++) {
for (int j=0;j<y;j++) {
cout << A[i+j*x] << " ";
}
cout << ",";
}
}
例如:
输入:1,2,3,4,5,6,7,8,9
输出:6位数字6位数字4,2 6位数字5,3 6位数字6
有什么想法吗?
最佳答案
如果 ND 数组是指 Iliffe vector ,您没有正确构建它。数据必须连续分配,因此在一次分配中,因为连续调用 new 返回的内存不一定是连续的。这应该可以完成工作:
int **A = new int *[rowsA];
int *data = new int[rowsA*columnsA];
for (int i=0;i<rowsA;i++) {
A[i] = data + i*columnsA;
for(int j=0;j<columnsA;j++) {
cout << "Enter " << "(" << i << "," << j << "): ";
cin >> A[i][j];
}
}
关于C++ 动态 ND 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679852/