一、题目描述
设计一个矩阵类模板Matrix,支持任意数据类型的数据。
要求至少包含2个成员函数:矩阵转置函数transport、以及打印输出函数print
编写main函数进行测试,调用类的成员函数完成转置和输出。
二、输入与输出
1.输入
第一行先输入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
2.输出
输出转置后的矩阵
1 4
2 5
3 6
a d g
b e h
c f i
三、参考代码
#include <iostream>
#include <vector>
#include<string>
#include<cmath>
#include <memory>
using namespace std;
template<class T>
class Mar
{
int h;
int l;
T** a;
public:
Mar(int n1, int n2) :h(n1), l(n2)
{
a = new T * [h];
for (int i = 0; i < h; i++)
{
a[i] = new T[l];
}
for (int i = 0; i < h; i++)
{
for (int j = 0; j < l; j++)
{
cin >> a[i][j];
}
}
}
void transport()
{
T** b;
b = new T * [l];
for (int i = 0; i < l; i++)
{
b[i] = new T[h];
}
for (int i = 0; i < l; i++)
{
for (int j = 0; j < h; j++)
{
b[i][j] = a[j][i];
}
}
for (int i = 0; i < h; i++)
{
delete[]a[i];
}
delete[]a;
a = new T * [l];
for (int i = 0; i < l; i++)
{
a[i] = new T[h];
}
for (int i = 0; i <l; i++)
{
for (int j = 0; j < h; j++)
{
a[i][j] = b[i][j];
}
}
}
void pri()
{
int i, j;
for ( i = 0; i < l; i++)
{
for ( j = 0; j < h-1; j++)
{
cout << a[i][j] << " ";
}
cout << a[i][j] << endl;
}
}
~Mar()
{
for (int i = 0; i < l; i++)
{
delete[]a[i];
}
delete[]a;
}
};
int main()
{
int sum;
cin >> sum;
char ch;
int num1 = 0;
int num2 = 0;
while (sum--)
{
cin >> ch;
cin >> num1 >> num2;
if (ch == 'I')
{
Mar<int> a(num1, num2);
a.transport();
a.pri();
}
if (ch == 'C')
{
Mar<char> a(num1, num2);
a.transport();
a.pri();
}
if (ch == 'D')
{
Mar<double> a(num1, num2);
a.transport();
a.pri();
}
}
return 0;
}