题目描述
设计一个矩阵类模板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 <bits/stdc++.h>
using namespace std;
template <class T>
class matrix
{
private:
T **s;
int m, n;
public:
matrix(int a, int b)
{
m = a;
n = b;
s = new T *[m];
for (int i = 0; i < m; i++)
{
s[i] = new T[n];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> s[i][j];
}
}
}
void transport()
{
T **temp;
temp = new T *[n];
for (int i = 0; i < n; i++)
{
temp[i] = new T[m];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
temp[j][i] = s[i][j];
}
}
s = new T *[n];
for (int i = 0; i < n; i++)
{
s[i] = new T[m];
}
swap(m, n);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
s[i][j] = temp[i][j];
}
}
delete temp;
}
void show()
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << s[i][j] << " ";
}
cout << endl;
}
}
};
int main()
{
int t, m, n;
cin >> t;
char a;
while (t--)
{
cin >> a >> m >> n;
switch (a)
{
case 'I':
{
matrix<int> p(m, n);
p.transport();
p.show();
break;
}
case 'D':
{
matrix<double> p(m, n);
p.transport();
p.show();
break;
}
case 'C':
{
matrix<char> p(m, n);
p.transport();
p.show();
break;
}
}
}
return 0;
}