zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++ | 矩阵类模板(类模板)

C++模板 矩阵
2023-06-13 09:11:32 时间

大家好,又见面了,我是你们的朋友全栈君。

问题 B: 矩阵类模板(类模板)

题目描述

设计一个矩阵类模板Matrix,支持任意数据类型的数据。

要求至少包含2个成员函数:矩阵转置函数transport、以及打印输出函数print

编写main函数进行测试,调用类的成员函数完成转置和输出。

输入

第一行先输入t,表示有t个测试用例

从第二行开始输入每个测试用例的数据。

首先输入数据类型,I表示int,D表示double,C表示char,接着输入两个参数m和n,分别表示矩阵的行和列

接下来输入矩阵的元素,一共m行,每行n个数据

输出

输出转置后的矩阵

样例输入

2

I 2 3

1 2 3

4 5 6

C 3 3

a b c

d e f

g h i

样例输出

1 4

2 5

3 6

a d g

b e h

c f i

#include<iostream>
#include <cstring>
using namespace std;
 
template<typename T>
class Matrix
{
private:
    T **Max;
    int row,col;
public:
    Matrix():row(0),col(0){}
    Matrix(T** M,int m,int n)
    {
        int i,j;
        row=m,col=n;
        Max=new T*[row];
        for( i=0;i<row;i++)
            Max[i]=new T [col];
  
        for( i=0;i<row;i++)
          for( j=0;j<col;j++)
            Max[i][j]=M[i][j];
    }
    Matrix(Matrix &M)
    {
        for(int i=0;i<row;i++)
          for(int j=0;j<col;j++)
            Max[i][j]=M.Max[i][j];
    }
    void transport()
    {
        int i,j;
        T **M;
        M=new T*[row];
        for( i=0;i<row;i++)
            M[i]=new T [col];
 
        for( i=0;i<row;i++)
          for( j=0;j<col;j++)
            M[i][j]=Max[i][j];
         
         for(i=0;i<row;i++)
          delete [] Max[i];
        delete [] Max;
 
        int temp = row;
        row=col;
        col=temp;
 
        Max=new T*[row];
        for( i=0;i<row;i++)
            Max[i]=new T [col];
 
        for( i=0;i<row;i++)
          for( j=0;j<col;j++)
            Max[i][j]=M[j][i];
 
         for(i=0;i<col;i++)
          delete [] M[i];
        delete [] M;
 
    }
    void print()
    {
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col-1;j++)
             cout<<Max[i][j]<<" ";
            cout<<Max[i][col-1]<<endl;
        }
    }
    ~Matrix()
    {
        for(int i=0;i<row;i++)
          delete [] Max[i];
        delete [] Max;
    }
};
 
int main()
{
    int m,n,times,
        i,j;
    char ch;
    int** m1;
    double** m2;
    char** m3;
     
    cin>>times;
    while(times--)
    {
        cin>>ch;
        cin>>m>>n;
  
        if(ch=='I')
        {
            m1=new int*[m];
            for( i=0;i<m;i++)
                m1[i]=new int [n];
  
            for(i=0;i<m;i++)
                for( j=0;j<n;j++)
            cin>>m1[i][j];
  
            Matrix<int>Ma1(m1,m,n);
            Ma1.transport();
            Ma1.print();
 
            for( i=0;i<m;i++)
              delete [] m1[i];
            delete [] m1;
        }
        if(ch=='D')
        {
            m2=new double*[m];
            for( i=0;i<m;i++)
                m2[i]=new double [n];
  
            for( i=0;i<m;i++)
                for( j=0;j<n;j++)
                cin>>m2[i][j];
  
            Matrix<double>Ma1(m2,m,n);
            Ma1.transport();
            Ma1.print();
 
            for( i=0;i<m;i++)
              delete [] m2[i];
            delete [] m2;
        }
        if(ch=='C')
        {
            m3=new char*[m];
            for(int i=0;i<m;i++)
                m3[i]=new char [n];
  
            for( i=0;i<m;i++)
                for( j=0;j<n;j++)
            cin>>m3[i][j];
  
            Matrix<char>Ma1(m3,m,n);
            Ma1.transport();
            Ma1.print();
  
            for( i=0;i<m;i++)
              delete [] m3[i];
            delete [] m3;
        }
    }
    return 0; 
}
/**************************************************************
    Problem: 1070
    User: 201*****23
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:1272 kb
****************************************************************/

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146694.html原文链接:https://javaforall.cn