#include <stdio.h>
#include <iostream>
#include <memory>
#include <cassert>
using namespace std;
class matrix
{
public:
int row;
int col;
int** mat;
matrix(int m, int n) : row(m), col(n), mat(nullptr)
{
mat = new int*[row];
for (int i = 0; i < row; ++i)
mat[i] = new int[col];
FillMat();
}
int& operator()(const int m, const int n)
{
assert(m >= 0 && m < row);
assert(n >= 0 && n < col);
return mat[m][n];
}
int getRow()
{
return row;
}
int getCol()
{
return col;
}
void showMat()
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
cout << mat[i][j] << "\t";
}
cout << endl;
}
}
void FillMat()
{
int count = 1;
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
mat[i][j] = count++;
}
}
}
~matrix()
{
if (mat)
{
for (int i = 0; i < row; ++i)
delete[] mat[i];
delete mat;
}
}
};
void rotateCounterClockwise(matrix& source)
{
int m = source.getRow();
int n = source.getCol();
matrix result(n, m);
for(int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
result((n - j - 1), i) = source(i, j);
}
}
result.showMat();
}
int main()
{
matrix mat(5, 6);
mat.showMat();
cout << endl << endl << endl;
rotateCounterClockwise(mat);
}