题目描述
设计一个矩阵类模板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<cmath>
#include <cstring>
using namespace std;
template<class T>
class Matrix {
private:
T **data;
int m;
int n;
public:
Matrix(int m1,int n1):m(m1),n(n1) { //构造函数
int i, j;
data=new T*[m]; //先创建m行
for(i=0; i<m; i++) {
data[i]=new T[n]; //再创建n列
}
for (i=0; i<m; i++)
for (j=0; j<n; j++)
cin>>data[i][j];
}
void transport() { //转置函数
T **temp;
int i, j,t;
temp=new T*[n];
for(i=0; i<n; i++) {
temp[i]=new T[m];
}
for(i=0; i<m; i++) //把转置的矩阵存放在temp里
for(j=0; j<n; j++)
temp[j][i]=data[i][j];
data=new T*[n]; //重新为data分配转置需要的空间
for(i=0; i<n; i++) {
data[i]=new T[m];
}
t=m; //转置后,行列值需要互换
m=n;
n=t;
for (i=0; i<m; i++) //把temp赋值给data完成转置
for (j=0; j<n; j++)
data[i][j]=temp[i][j];
delete temp;
}
void print() {
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++)
cout<<data[i][j]<<" ";
cout<<endl;
}
}
~Matrix() {
if(data!=NULL)
delete data;
}
};
int main() {
int t,m,n;
char c;
cin>>t;
while(t--) {
cin>>c>>m>>n;
switch(c) {
case 'I': {
Matrix <int>I1(m,n);
I1.transport();
I1.print();
break;
}
case 'D': {
Matrix <double>D1(m,n);
D1.transport();
D1.print();
break;
}
case 'C': {
Matrix <char>C1(m,n);
C1.transport();
C1.print();
break;
}
}
}
}