C++ | 矩阵类模板(类模板)
2023-06-13 09:11:32 时间
大家好,又见面了,我是你们的朋友全栈君。
问题 B: 矩阵类模板(类模板)
题目描述
设计一个矩阵类模板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
相关文章
- EasyC++40,模板重载
- C++模板
- C++结构体和类的区别_c++有结构体吗
- C++ 不知树系列之认识二叉树(数组、链表存储的实现)
- C/C++ Qt StatusBar 底部状态栏应用
- C/C++ Qt 数据库与ComBox多级联动
- c++存储类
- 用vscode写c/c++代码
- C/C++/Delphi 调用命令并且显示执行结果
- 【Android NDK 开发】JNI 方法解析 ( C/C++ 设置 Java 对象字段 | 查找字段 | 设置字段 )
- 【C++修炼之路】7. 模板初阶
- C++:哈希:闭散列哈希表
- C++类模板案例-构建自己的通用数组
- 【C++】模板初阶&&STL简介
- 【C++】哈希
- C++函数模板(模板函数)详解
- C++用类模板实现可变长数组
- C++ pair(STL pair)类模板的用法详解
- C++ hash(STL hash)及其函数模板用法详解
- 浅析C/C++变量在内存中的分布
- C++中的类模板详解及示例
- C++模板类的用法
- C++类模板与模板类深入详解
- VC++基于Dx实现的截图程序示例代码