题目描述
设计一个矩阵类模板Matrix,支持任意数据类型的数据。
要求至少包含2个成员函数:矩阵转置函数transport、以及打印输出函数print
编写main函数进行测试,调用类的成员函数完成转置和输出。
输入
第一行先输入t,表示有t个测试用例
从第二行开始输入每个测试用例的数据。
首先输入数据类型,I表示int,D表示double,C表示char,接着输入两个参数m和n,分别表示矩阵的行和列
接下来输入矩阵的元素,一共m行,每行n个数据
输出
输出转置后的矩阵
IO模式
本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。
#include<iostream>
using namespace std;
template<class T>
class Matrix
{
private:
int m, n;
T ** p;
public:
Matrix(T ** pl,int a,int b):m(a),n(b)
{
p = pl;
}
void transport()
{
T** k;
k = new T * [n];
for (int i = 0; i < n; i++)
{
k[i] = new T[m];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
k[j][i] = p[i][j];
}
}
p = k;
}
void print()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << p[i][j];
if (j != m - 1) cout << " ";
}
cout << endl;
}
cout << endl;
}
};
int main()
{
int t;
cin >> t;
while(t--)
{
char o;
int m, n;
cin >> o >> m >> n;
if (o == 'I')
{
int** k;
k = new int *[m];
for (int i = 0; i < m; i++)
{
k[i] = new int[n];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> k[i][j];
}
}
Matrix<int> p(k,m, n);
p.transport();
p.print();
}
if (o == 'D')
{
double ** k;
k = new double* [m];
for (int i = 0; i < m; i++)
{
k[i] = new double[n];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> k[i][j];
}
}
Matrix<double> p(k, m, n);
p.transport();
p.print();
}
if (o == 'C')
{
char** k;
k = new char* [m];
for (int i = 0; i < m; i++)
{
k[i] = new char[n];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> k[i][j];
}
}
Matrix<char> p(k, m, n);
p.transport();
p.print();
}
}
return 0;
}