Ex6_2.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例6.2】矩阵运算:矩阵转置与矩阵相乘函数模板。下标作为参数传递。
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;
  5. template <typename T1,typename T2> void inverse(T1 *mat1,T2 *mat2,int a,int b);
  6. template <typename T1,typename T2>void multi(T1 *mat1,T2 *mat2,T2 *result,int a,int b,int c);
  7. template <typename T>void output(T *mat,char*s,int a,int b);
  8. int main(){
  9.     int middle[6][3], result[6][4];
  10.     int matrix1[3][6]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6};   
  11.     int matrix2[3][4]={3,2,1,0,-1,-2,9,8,7,6,5,4};
  12.     char *s1="result";
  13. char *s2="middle";
  14. inverse(matrix1,middle,6,3);
  15.      //显式:inverse<int[6],int[3]> (matrix1,middle,6,3);
  16.     multi(middle,matrix2,result,6,3,4);
  17.      //显式:multi <int[3],int[4]> (middle,matrix2,result,6,3,4); 
  18.     output(matrix1,"matrix1",3,6);
  19. output(middle,s2,6,3);
  20. output(matrix2,"matrix2",3,4);
  21. output(result,s1,6,4);
  22. return 0;
  23. }
  24. template <typename T1, typename T2>void inverse(T1 *mat1,T2 *mat2,int a,int b){            
  25.     int i,j;
  26.     for (i=0;i<b;i++)
  27.       for (j=0;j<a;j++)
  28.         mat2[j][i]=mat1[i][j];
  29.   return;                                                      
  30. }
  31. template <typename T1,typename T2>void multi(T1 *mat1,T2 *mat2,T2 *result,int a,int b,int c){
  32. //二维数组的类型仅指其组成元素类型(一维数组),而与元素数量无关
  33. //如matrix2和result是同一类型,其元素同为整型4元素一维数组,尽管前者只有3个元素,后者有6个
  34.     int i,j,k;
  35.     for (i=0;i<a;i++){
  36.       for (j=0;j<c;j++){
  37.         result[i][j] = 0;
  38.         for (k=0;k<b;k++)
  39.           result[i][j]+=mat1[i][k]*mat2[k][j];
  40.       }
  41.     }
  42.     return;
  43. }
  44. template <typename T>void output(T *mat,char *s,int a,int b){
  45.     int i,j;
  46. cout<<s<<endl;
  47.     for (i=0;i<a;i++){
  48.       for (j=0;j<b;j++)
  49.         cout<<setw(6)<<mat[i][j];
  50.       cout<<endl;
  51.     }
  52.     return;                                                       
  53. }