题目描述
设计一个矩阵类模板Matrix,支持任意数据类型的数据。
要求至少包含2个成员函数:矩阵转置函数transport、以及打印输出函数print
编写main函数进行测试,调用类的成员函数完成转置和输出。
输入
第一行先输入t,表示有t个测试用例
从第二行开始输入每个测试用例的数据。
首先输入数据类型,I表示int,D表示double,C表示char,接着输入两个参数m和n,分别表示矩阵的行和列
接下来输入矩阵的元素,一共m行,每行n个数据
输出
输出转置后的矩阵
输入样例1
2 I 2 3 1 2 3 4 5 6 C 3 3 a b c d e f g h i
输出样例1
1 4 2 5 3 6 a d g b e h c f i
思路分析
写一个模板类,开辟一个二维数组,题目没什么东西,拷贝构造函数什么的就不用折腾了,析构函数还是要写一下的,矩阵转置的话,我习惯在输入的时候就给它转了。
AC代码
代码语言:javascript复制#include <iostream>
using namespace std;
template<class T>
class Matrix
{
int m, n;
T** matrix = NULL;
public:
~Matrix()
{
if (matrix)
{
for (int i = 0; i < n; i )
delete[] matrix[i];
delete[] matrix;
matrix = NULL;
}
}
void datain()
{
cin >> m >> n;
matrix = new T * [n];
for (int i = 0; i < n; i )
matrix[i] = new T[m];
}
void transport()
{
int i, j;
for (j = 0; j < m; j )
for (i = 0; i < n; i )
cin >> matrix[i][j];
}
void print()
{
int i, j;
for (i = 0; i < n; i )
{
for (j = 0; j < m-1; j )
cout << matrix[i][j]<<' ';
cout << matrix[i][j] << endl;
}
}
};
int main()
{
int t;
char instru;
cin >> t;
while (t--)
{
cin >> instru ;
if (instru == 'I')
{
Matrix<int> a;
a.datain();
a.transport();
a.print();
}
else if (instru == 'D')
{
Matrix<double> a;
a.datain();
a.transport();
a.print();
}
else if(instru=='C')
{
Matrix<char> a;
a.datain();
a.transport();
a.print();
}
}
return 0;
}