矩阵类模板(类模板)
题目描述
设计一个矩阵类模板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>
using namespace std;
template <class T>
class Matrix{
public:
Matrix(){
}
void transport(T **a,int m,int n)
{
m1=m;
n1=n;
b=new T*[m1];
for(int j=0;j<m1;j++)
b[j]=new T[n1];
for(int i=0;i<m1;i++)
for(int j=0;j<n1;j++)
b[i][j]=a[i][j];
}
void print()
{
int i,j=0,z;
for(z=0;z<n1;z++)
{
for(i=0;i<m1;i++)
{
cout<<b[i][j];
if(i!=m1-1)
cout<<" ";
else
cout<<endl;
}
j++;
}
}
~Matrix()
{
for(int i=0;i<m1;i++)
delete []b[i];
delete []b;
}
private:
T **b;
int m1,n1;
};
int main()
{
int i,t,m,n,j,z;
char k;
cin>>t;
for(i=0;i<t;i++)
{
cin>>k>>m>>n;
if(k=='I')
{
int **a=new int*[m];
for(j=0;j<m;j++)
a[j]=new int[n];
for(z=0;z<m;z++)
for(j=0;j<n;j++)
cin>>a[z][j];
Matrix<int> Matrix1;
Matrix1.transport(a,m,n);
Matrix1.print();
for(j=0;j<m;j++)
delete []a[j];
delete []a;
}
else if(k=='D')
{
double **a=new double*[m];
for(j=0;j<m;j++)
a[j]=new double[n];
for(z=0;z<m;z++)
for(j=0;j<n;j++)
cin>>a[z][j];
Matrix<double> Matrix2;
Matrix2.transport(a,m,n);
Matrix2.print();
for(j=0;j<m;j++)
delete []a[j];
delete []a;
}
else if(k=='C')
{
char **a=new char*[m];
for(j=0;j<m;j++)
a[j]=new char[n];
for(z=0;z<m;z++)
for(j=0;j<n;j++)
cin>>a[z][j];
Matrix<char> Matrix3;
Matrix3.transport(a,m,n);
Matrix3.print();
for(j=0;j<m;j++)
delete []a[j];
delete []a;
}
}
return 0;
}