PTA 动态二维数组的转置

设计一个矩阵类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; 
}

 运行结果:

参考博客:C++中vector<vector<int> >的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值