#include <iostream>
#include <iomanip>
using namespace std;
class Matrix
{
size_t rows, cols;
int **data;
void swap(Matrix&M)
{
std::swap(data,M.data);
std::swap(rows,M.rows);
std::swap(cols,M.cols);
}
public:
Matrix(size_t rows, size_t cols):rows(rows),cols(cols)
{
data = new int *[rows];
for(size_t i = 0; i < rows; i++)
data[i] = new int[cols];
}
~Matrix()
{
for (size_t i = 0; i < rows; i++)
delete[] data[i];
delete[] data;
}
Matrix(const Matrix&M):Matrix(M.rows,M.cols)
{
for(size_t i = 0; i < rows; i++)
for(size_t j = 0; j < cols; j++)
data[i][j] = M.data[i][j];
}
Matrix& operator = (const Matrix& M)
{
Matrix tmp(M);
swap(tmp);
return *this;
}
friend ostream& operator<<(ostream&os, const Matrix& M);
friend istream& operator>>(istream&is, Matrix& M);
Matrix transpose()
{
Matrix temp(cols,rows);
for(size_t i = 0; i < rows; i++)
for(size_t j = 0; j < cols; j++)
temp.data[j][i] = data[i][j];
return temp;
}
};
ostream& operator<<(ostream&os, const Matrix& M)
{
for(size_t i = 0; i < M.rows; i++)
{
for(size_t j = 0; j < M.cols; j++)
{
os << M.data[i][j]<< " ";
}
os << "\n";
}
return os;
}
istream& operator>>(istream&is, Matrix& M)
{
for(size_t i = 0; i < M.rows; i++)
{
for(size_t j = 0; j < M.cols; j++)
{
cout << "Matrix[" << i << "][" << j << "] = ";
is >> M.data[i][j];
}
}
return is;
}
int main()
{
int num_of_cols, num_of_rows;
cout <<"input the num of cols and rows"<<endl;
cin >> num_of_rows >> num_of_cols;
Matrix ob1(num_of_rows, num_of_cols);
cin >> ob1;
cout << "\n\n" << ob1 << "\n\n";
Matrix ob2 = ob1.transpose();
cout << ob2 << "\n\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBNYXRyaXgKewogICAgc2l6ZV90IHJvd3MsIGNvbHM7CiAgICBpbnQgKipkYXRhOwogICAgdm9pZCBzd2FwKE1hdHJpeCZNKQogICAgewogICAgICAgIHN0ZDo6c3dhcChkYXRhLE0uZGF0YSk7CiAgICAgICAgc3RkOjpzd2FwKHJvd3MsTS5yb3dzKTsKICAgICAgICBzdGQ6OnN3YXAoY29scyxNLmNvbHMpOwogICAgfQpwdWJsaWM6CiAgICBNYXRyaXgoc2l6ZV90IHJvd3MsIHNpemVfdCBjb2xzKTpyb3dzKHJvd3MpLGNvbHMoY29scykKICAgIHsKICAgICAgICBkYXRhID0gbmV3IGludCAqW3Jvd3NdOwogICAgICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCByb3dzOyBpKyspCiAgICAgICAgICAgIGRhdGFbaV0gPSBuZXcgaW50W2NvbHNdOwogICAgfQogICAgfk1hdHJpeCgpCiAgICB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb3dzOyBpKyspCiAgICAgICAgICAgIGRlbGV0ZVtdIGRhdGFbaV07CiAgICAgICAgZGVsZXRlW10gZGF0YTsKICAgIH0KCiAgICBNYXRyaXgoY29uc3QgTWF0cml4Jk0pOk1hdHJpeChNLnJvd3MsTS5jb2xzKQogICAgewogICAgICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCByb3dzOyBpKyspCiAgICAgICAgZm9yKHNpemVfdCBqID0gMDsgaiA8IGNvbHM7IGorKykKICAgICAgICAgICAgZGF0YVtpXVtqXSA9IE0uZGF0YVtpXVtqXTsKICAgIH0KCiAgICBNYXRyaXgmIG9wZXJhdG9yID0gKGNvbnN0IE1hdHJpeCYgTSkKICAgIHsKICAgICAgICBNYXRyaXggdG1wKE0pOwogICAgICAgIHN3YXAodG1wKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSZvcywgY29uc3QgTWF0cml4JiBNKTsKICAgIGZyaWVuZCBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0maXMsICAgICAgIE1hdHJpeCYgTSk7CgogICAgTWF0cml4IHRyYW5zcG9zZSgpCiAgICB7CiAgICAgICAgTWF0cml4IHRlbXAoY29scyxyb3dzKTsKICAgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgcm93czsgaSsrKQogICAgICAgICAgICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgY29sczsgaisrKQogICAgICAgICAgICAgICAgdGVtcC5kYXRhW2pdW2ldID0gZGF0YVtpXVtqXTsKICAgICAgICByZXR1cm4gdGVtcDsKICAgIH0KICAgICAgICAKfTsKCgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mb3MsIGNvbnN0IE1hdHJpeCYgTSkKewogICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IE0ucm93czsgaSsrKQogICAgewogICAgICAgIGZvcihzaXplX3QgaiA9IDA7IGogPCBNLmNvbHM7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIG9zIDw8IE0uZGF0YVtpXVtqXTw8ICIgIjsKICAgICAgICB9CiAgICAgICAgb3MgPDwgIlxuIjsKICAgIH0KICAgIHJldHVybiBvczsKfQoKaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJmlzLCBNYXRyaXgmIE0pCnsKICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBNLnJvd3M7IGkrKykKICAgIHsKICAgICAgICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgTS5jb2xzOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICJNYXRyaXhbIiA8PCBpIDw8ICJdWyIgPDwgaiA8PCAiXSA9ICI7CiAgICAgICAgICAgIGlzID4+IE0uZGF0YVtpXVtqXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gaXM7Cn0KCmludCBtYWluKCkKewogICAgaW50IG51bV9vZl9jb2xzLCBudW1fb2Zfcm93czsKICAgIGNvdXQgPDwiaW5wdXQgdGhlIG51bSBvZiBjb2xzIGFuZCByb3dzIjw8ZW5kbDsKICAgIGNpbiA+PiBudW1fb2Zfcm93cyA+PiBudW1fb2ZfY29sczsKICAgIAogICAgTWF0cml4IG9iMShudW1fb2Zfcm93cywgbnVtX29mX2NvbHMpOwogICAgY2luID4+IG9iMTsKICAgIGNvdXQgPDwgIlxuXG4iIDw8IG9iMSA8PCAiXG5cbiI7CgogICAgTWF0cml4IG9iMiA9IG9iMS50cmFuc3Bvc2UoKTsKCiAgICBjb3V0IDw8IG9iMiA8PCAiXG5cbiI7Cn0KCg==