大家好,又见面了,我是你们的朋友全栈君。
设计一个矩阵类模板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>
using namespace std;
template<typename T>
class Matrix
{
private:
T **Max;
int row,col;
public:
Matrix():row(0),col(0){}
Matrix(T** M,int m,int n)
{
int i,j;
row=m,col=n;
Max=new T*[row];
for( i=0;i<row;i++)
Max[i]=new T [col];
for( i=0;i<row;i++)
for( j=0;j<col;j++)
Max[i][j]=M[i][j];
}
Matrix(Matrix &M)
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
Max[i][j]=M.Max[i][j];
}
void transport()
{
int i,j;
T **M;
M=new T*[row];
for( i=0;i<row;i++)
M[i]=new T [col];
for( i=0;i<row;i++)
for( j=0;j<col;j++)
M[i][j]=Max[i][j];
for(i=0;i<row;i++)
delete [] Max[i];
delete [] Max;
int temp = row;
row=col;
col=temp;
Max=new T*[row];
for( i=0;i<row;i++)
Max[i]=new T [col];
for( i=0;i<row;i++)
for( j=0;j<col;j++)
Max[i][j]=M[j][i];
for(i=0;i<col;i++)
delete [] M[i];
delete [] M;
}
void print()
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col-1;j++)
cout<<Max[i][j]<<" ";
cout<<Max[i][col-1]<<endl;
}
}
~Matrix()
{
for(int i=0;i<row;i++)
delete [] Max[i];
delete [] Max;
}
};
int main()
{
int m,n,times,
i,j;
char ch;
int** m1;
double** m2;
char** m3;
cin>>times;
while(times--)
{
cin>>ch;
cin>>m>>n;
if(ch=='I')
{
m1=new int*[m];
for( i=0;i<m;i++)
m1[i]=new int [n];
for(i=0;i<m;i++)
for( j=0;j<n;j++)
cin>>m1[i][j];
Matrix<int>Ma1(m1,m,n);
Ma1.transport();
Ma1.print();
for( i=0;i<m;i++)
delete [] m1[i];
delete [] m1;
}
if(ch=='D')
{
m2=new double*[m];
for( i=0;i<m;i++)
m2[i]=new double [n];
for( i=0;i<m;i++)
for( j=0;j<n;j++)
cin>>m2[i][j];
Matrix<double>Ma1(m2,m,n);
Ma1.transport();
Ma1.print();
for( i=0;i<m;i++)
delete [] m2[i];
delete [] m2;
}
if(ch=='C')
{
m3=new char*[m];
for(int i=0;i<m;i++)
m3[i]=new char [n];
for( i=0;i<m;i++)
for( j=0;j<n;j++)
cin>>m3[i][j];
Matrix<char>Ma1(m3,m,n);
Ma1.transport();
Ma1.print();
for( i=0;i<m;i++)
delete [] m3[i];
delete [] m3;
}
}
return 0;
}
/**************************************************************
Problem: 1070
User: 201*****23
Language: C++
Result: 正确
Time:0 ms
Memory:1272 kb
****************************************************************/
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146694.html原文链接:https://javaforall.cn