设计一个矩阵类Matrix(整型动态二维数组类)类中成员函数有:
构造函数(创建m行n列的矩阵);析构函数(释放动态申请数组空间);读入函数ReadMatrix(创建m行n列的矩阵元素的值);
输出函数WriteMatrix(输出m行n列的矩阵元素的值,每个元素占5个字符宽度 );
转置函数void Transpose(Matrix& B)(将当前对象矩阵转置为一个n行m列的B矩阵)。
在main()函数中输入m,n的值创建m行n列的矩阵A,矩阵B是A的转置矩阵。
int main(){
int m,n;
cin>>m>>n;
Matrix A(m,n);
A.ReadMatrix();
A.WriteMatrix();
Matrix B(n,m);
A.Transpose(B);
B.WriteMatrix();
system("pause");
return 0;
}
输入格式:
第一行:读入连个整数m,n (中间空格隔开)
接下m行,每行读入n个整数(读入A矩阵)
输出格式:
先输出A矩阵
后输出B矩阵(A的转置矩阵)
输入样例:
在这里给出一组输入。例如:
4 3
1 2 3
2 3 4
3 4 5
4 5 6
输出样例:
在这里给出相应的输出。例如:
1 2 3
2 3 4
3 4 5
4 5 6
1 2 3 4
2 3 4 5
3 4 5 6
预备知识:
我们可以简单的认为,向量vector是一个能够存放任意类型的动态数组;
vector< vector<int> > v(m, vector<int>(n) );
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0;
也可以初始化为任意int型数,eg:
初始化为1:vector< vector<int> > v(m, vector<int>(n,1) );
从结果上看,类似于创建了一个m×n的二维数组,而且可以通过v[i][j]的方式来访问元素(vector支持下标访问元素)
代码:
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
using std::setw;
class Matrix{
public:
Matrix(int mm,int nn):m(mm),n(nn){
vector< vector<int> > matrix0(mm,vector<int>(nn));
matrix=matrix0;
}//构造函数
~Matrix(){}//析构函数
void ReadMatrix(){
int x;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>x;
matrix[i][j]=x;
}
}
}
void WriteMatrix(){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cout<<std::setw(5)<<matrix[i][j];
}
cout<<endl;
}
}
void Transpose(Matrix &B){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
B.matrix[j][i]=matrix[i][j];
}
}
}
private:
int m,n;
vector< vector<int> > matrix;
};
int main(){
int m,n;
cin>>m>>n;
Matrix A(m,n);
A.ReadMatrix();
A.WriteMatrix();
Matrix B(n,m);
A.Transpose(B);
B.WriteMatrix();
system("pause");
return 0;
}
运行结果: