矩阵运算-----模板

本人第一次写博客,写的不好之处望多体谅。。。


由于博主在用c++写矩阵运算时,遇到了一系列问题,希望在这里做一个总结,也能帮到许多初学者。

    在矩阵运算中,由于涉及二维数组(m行n列),若用函数直接定义数组,需要给定m、n值,这在实际应用中受到很大限制,我们在实际上中往往需要的是一个能计算任意大小的矩阵的方法(函数)。本人曾经试图将其定义为一维数组,通过定义一个a[m*n]矩阵,但是事与愿违,在实际的运算中又涉及许多算法知识,较为复杂。在这种情形下,模板(Template)成为了最好的选择。

(1)模板之矩阵的转置

template<typename T1, typename T2>void Transpose(T1*mat1, T2*mat2, int a, int b)
{  
    int i, j;
    for (i = 0; i<a; i++)
    for (j = 0; j<b; j++)
    mat2[j][i] = mat1[i][j];
    return;
}

(2)模板之矩阵相乘

template<typename T1, typename T2>void Multi(T1*mat1, T2 * mat2, T2 * result, int a, int b, int c)
{
   int i, j, k;
   for (i = 0; i<a; i++)
   {
      for (j = 0; j<c; j++)
     {
        result[i][j] = 0;
        for (k = 0; k<b; k++)
         result[i][j] += mat1[i][k] * mat2[k][j];
      }
    }
}

(3)模板之矩阵相加

//矩阵相加
template<typename T1, typename T2>void Add(T1*mat1, T2 * mat2, int a, int b)
{
  for (int i = 0; i<a; i++)
  for (int j = 0; j<b; j++)
  mat1[i][j] = mat1[i][j] + mat2[i][j];
}

(4)模板之矩阵相减

//矩阵相减
template<typename T1, typename T2>void Sub(T1 *mat1, T2 *mat2, T2 * result, int a, int b)
{
    for (int i = 0; i<a; i++)
    for (int j = 0; j<b; j++)
    result[i][j] = mat1[i][j] - mat2[i][j];
}
模板的使用,使矩阵运算能够满足double、int等数据类型,编译器均不会报错!!!

猜你喜欢

转载自blog.csdn.net/qq_38149046/article/details/79829396