c++ - 转置二维动态矩阵

标签 c++ dynamic matrix transpose

我想为动态二维数组创建一个转置函数。我希望函数将二维数组以及行和列作为参数。我决定使用双指针。但是我对如何从 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])。 (即 yz 必须是常量。)但实际上,您无论如何都将动态数组传递给转置函数,并且 rowscolumns 不必是常量即可。所以,总的来说,定义一个像这样的动态数组:

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/

相关文章:

c - 在 C 中使用指针转置矩阵

c - 如何在 C 中动态分配一个字符串数组?

opencv - 如何在 Mat 中查找特定区域中的非零像素

algorithm - 如何充分计算这个矩阵

c++ - 如何将 QProgressBar 链接到终端进程百分比?

postgresql - hibernate 动态查询

c# - TryInvokeMember 和 TryInvoke 之间的区别

c++ - 二值图像数据上的 CImg

c++ - 函数 pow() int C++

c++ - std::unique_ptr 如何没有大小开销?