我想为动态二维数组创建一个转置函数。我希望函数将二维数组以及行和列作为参数。我决定使用双指针。但是我对如何从 main 调用函数有点困惑。所以我得到了上面的代码
#include<iostream>
using namespace std;
void transposeMatrix(double **mat, int rows, int columns)
{
mat = new double*[rows];
for (int i = 0; i < rows; ++i)
{
mat[i] = new double[columns];
}
double temp;
for (int i = 0; i<rows; i++)
{
for (int j = i+1; j<columns; j++)
{
temp=mat[i][j];
mat[i][j]=mat[j][i];
mat[j][i]=temp;
}
}
cout<< "\n";
for (int i = 0; i<rows; i++)
{
for (int j = 0; j<columns; j++)
{
cout << mat[i][j] << " \t";
}
cout << "\n";
}
}
int main()
{
int rows = 10;
int columns = 10;
double mat[rows][columns];
for (int i = 0; i<rows; i++)
{
for (int j = 0; j<columns; j++)
{
mat[i][j] = j;
}
}
for (int i = 0; i<rows; i++)
{
for (int j = 0; j<columns; j++)
{
cout << mat[i][j] << " \t";
}
cout << "\n";
}
//mat = new double[50][1];
transposeMatrix(mat, 10, 10);
system("pause");
return 0;
}
有什么想法吗?
最佳答案
你非常接近。您正在正确调用函数并且函数的参数列表是正确的。首先,从转置函数中删除此部分:
mat = new double*[rows];
for (int i = 0; i < rows; ++i)
mat[i] = new double[columns];
}
现在确保所有括号都匹配。 (少了一个。)
您不能使用非常量变量作为大小参数来定义静态数组(如下所示:x[y][z]
)。 (即 y
和 z
必须是常量。)但实际上,您无论如何都将动态数组传递给转置函数,并且 rows
和columns
不必是常量即可。所以,总的来说,定义一个像这样的动态数组:
double** mat = new double*[rows];
for (int i = 0; i < rows; i++)
mat[i] = new double[columns];
在那之后,您的代码应该可以工作了。但是您也可以通过将矩阵显示代码放入函数中来使其变得更好。然后,无需将其剪切和粘贴到各处,您只需调用该函数即可!这是一个重要的习惯。玩得开心!
关于c++ - 转置二维动态矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549289/