题目描述
设计一个矩阵类模板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>
#include<iomanip>
#include<algorithm>
using namespace std;
template<class T>
class Matrix {
int m;
int n;
T** a;
public:
Matrix(int x, int y, T** b) :m(x), n(y) {
a = new T * [m];
int i,j;
for (i = 0; i < m; i++)
{
a[i] = new T[n];
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
a[i][j] = b[i][j];
}
}
}
void transport()
{
T** b;
b = new T*[n];
int i, j;
for (i = 0; i < n; i++)
{
b[i] = new T[m];
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
b[i][j] = a[j][i];
}
}
for (i = 0; i < m; i++) {
delete[]a[i];
}
delete[]a;
a = new T * [n];
for (i = 0; i < n; i++)
{
a[i] = new T[m];
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
a[i][j]=b[i][j];
}
}
int temp;
temp = m;//不要忘记转置后行和列数相换
m = n;
n = temp;
}
void print()
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n-1; j++)
{
cout << a[i][j] << " ";
}
cout << a[i][j] << endl;
}
}
~Matrix() {
int i;
for (i = 0; i < m; i++) {
delete[]a[i];
}
delete[]a;
}
};
int main()
{
int t,i,j;
char kind;
int m, n;
cin >> t;
while (t--)
{
cin >> kind >> m>>n;
if (kind == 'I')
{
int** a = new int* [m];
for (i = 0; i < m; i++)
{
a[i] = new int[n];
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
Matrix<int> x(m, n, a);
x.transport();
x.print();
}
else if (kind == 'D')
{
double** a = new double* [m];
for (i = 0; i < m; i++)
{
a[i] = new double[n];
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
Matrix<double> x(m, n, a);
x.transport();
x.print();
}
else if (kind == 'C')
{
char** a = new char* [m];
for (i = 0; i < m; i++)
{
a[i] = new char[n];
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
Matrix<char> x(m, n, a);
x.transport();
x.print();
}
}
return 0;
}