c++矩阵类用一维数组存储矩阵元素实现矩阵相乘
时间: 2023-08-02 21:06:53 浏览: 315
可以通过将矩阵乘法的公式转化成一维数组的下标计算实现矩阵相乘,代码如下:
```c++
class Matrix {
private:
int rows, cols;
int *data; // 一维数组存储矩阵元素
public:
// 构造函数和析构函数
Matrix(int r, int c) : rows(r), cols(c) {
data = new int[rows * cols];
}
~Matrix() {
delete[] data;
}
// 计算一维数组下标
int index(int r, int c) {
return r * cols + c;
}
// 重载运算符
Matrix operator*(Matrix &other) {
if (cols != other.rows) {
// 抛出异常或返回空矩阵
}
Matrix result(rows, other.cols); // 新建一个结果矩阵
for (int i = 0; i < rows; i++)
for (int j = 0; j < other.cols; j++)
for (int k = 0; k < cols; k++)
result.data[result.index(i, j)] += data[index(i, k)] * other.data[other.index(k, j)]; // 矩阵乘法
return result;
}
};
```
其中,`operator*`为重载的运算符,用法如下:
```c++
Matrix m1(3, 2);
// 初始化矩阵元素
Matrix m2(2, 4);
// 初始化矩阵元素
Matrix m3 = m1 * m2; // 矩阵相乘
```
需要注意的是,矩阵相乘需要满足左矩阵的列数等于右矩阵的行数,否则会抛出异常或返回空矩阵。
阅读全文