C++矩阵类的实现
实现一维数组的矩阵转换以及矩阵的原地转置。
首先给出该矩阵类的声明:
class Matrix
{
private:
int **data;
int row;
int col;
public:
Matrix();
Matrix(int *data, int row, int col);
~Matrix();
void print();
void trans();
};
解决这道问题要用到的相关知识点有:
- 对于二维指针的熟练操作
- new与delete的使用
- 一维和二维数组的相关知识
- 了解类的相关知识
- 熟悉矩阵的转置
我们先来看一下源代码:
#include <iostream>
using namespace std;
class Matrix
{
private:
int **data;
int row;
int col;
public:
Matrix();
Matrix(int *data, int row, int col);
~Matrix();
void print();
void trans();
};
Matrix::Matrix()
{
data = NULL;
row = 0;
col = 0;
}
Matrix::Matrix(int *date, int row, int col)
{
data = new int*[row]; //new出来一个指针数组,容量为矩阵的行数,其中data指向data[0];
//*data表示data所指向的字符指针,**data表示data所指向的字符指针指向的内容;
*data = new int[col*row]; //new出来一个用来存储整形的数组,此时data[0]指向的是*data[0];
for (int i = 0;i < row;i++)
{
if (i != 0)
{
data[i] = data[i - 1] + col;
}
}
int t = 0;
for (int i = 0;i < row;i++)
{
for (int j = 0;j < col;j++)
{
data[i][j] = date[t];
t++;
}
}
this->row = row;
this->col = col;
}
Matrix::~Matrix()
{
delete[] *data;
delete[]data;
}
void Matrix::print()
{
int *q;
q = data[0];
for (int i = 0;i <row;i++)
{
for (int j = 0;j < col;j++)
{
cout << *q << " ";
q++;
}
cout << endl;
}
}
void Matrix::trans()
{
int *a;
a = new int[row*col];
int t = 0;
for (int i = 0;i < row;i++)
{
for (int j = 0;j < col;j++)
{
a[t] = data[i][j];
t++;
}
}
int m = 0, s = 0, n = 0;
for (int i = 0;i < row;i++)
{
for (int j = 0;j < col;j++)
{
if (s == row)
{
s = 0;
n++;
m = n;
}
data[i][j] = a[m];
m = m+ col;
s++;
}
}
int w;
w = row;
row = col;
col = w;
delete[]a;
}
int main(int argc, const char * argv[]) {
int a[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
Matrix m(a, 3, 4);
m.print();
cout << endl;
m.trans();
m.print();
cout << endl;
Matrix n(a, 2, 6);
n.print();
cout << endl;
n.trans();
cout << endl;
n.print();
return 0;
}
执行结果:
待续。。。。。