用c++实现矩阵乘法
时间: 2025-05-19 11:15:51 浏览: 7
### C++ 中矩阵乘法的实现
以下是基于所提供的内容和标准实践的一个完整的矩阵乘法实现示例。此代码展示了如何定义 `Matrix` 类并实现其成员函数来完成两个矩阵之间的相乘操作。
#### 定义 Matrix 类
首先,我们需要创建一个名为 `Matrix` 的类,该类用于存储矩阵数据及其维度信息:
```cpp
#include <vector>
#include <iostream>
class Matrix {
private:
std::size_t _Row;
std::size_t _Column;
std::vector<std::vector<int>> data;
public:
// 构造函数初始化矩阵大小,默认填充为0
Matrix(std::size_t rows, std::size_t cols, int value = 0) : _Row(rows), _Column(cols), data(rows, std::vector<int>(cols, value)) {}
// 获取行数
std::size_t getRows() const { return _Row; }
// 获取列数
std::size_t getColumns() const { return _Column; }
// 访问特定位置的数据 (重载括号运算符)
int& operator()(std::size_t row, std::size_t col) { return data[row][col]; }
const int& operator()(std::size_t row, std::size_t col) const { return data[row][col]; }
// 打印矩阵
void print() const {
for (const auto& row : data) {
for (int val : row) {
std::cout << val << "\t";
}
std::cout << std::endl;
}
}
// 矩阵乘法方法
Matrix multiply(const Matrix& B) const {
if (_Column != B.getRows()) throw std::invalid_argument("Incompatible dimensions");
Matrix result(_Row, B.getColumns(), 0);
for (std::size_t i = 0; i < _Row; ++i) {
for (std::size_t j = 0; j < B.getColumns(); ++j) {
for (std::size_t k = 0; k < _Column; ++k) {
result(i, j) += (*this)(i, k) * B(k, j);
}
}
}
return result;
}
};
```
上述代码中包含了以下几个部分:
- **构造函数**:允许指定矩阵的行列数目,并可选地设置初始值。
- **访问器** (`operator()`): 提供对矩阵元素的便捷访问方式。
- **打印功能** (`print`):方便调试时查看矩阵的内容。
- **核心逻辑** (`multiply`):实现了两矩阵间的逐元素乘积求和过程[^1]。
#### 使用示例
下面是如何利用上面定义好的 `Matrix` 类来进行实际计算的例子:
```cpp
int main(){
// 初始化第一个矩阵 A(2x3)
Matrix A(2, 3);
A(0,0)=1;A(0,1)=2;A(0,2)=3;
A(1,0)=4;A(1,1)=5;A(1,2)=6;
// 初始化第二个矩阵 B(3x2)
Matrix B(3, 2);
B(0,0)=7;B(0,1)=8;
B(1,0)=9;B(1,1)=10;
B(2,0)=11;B(2,1)=12;
try{
// 调用 multiply 方法得到结果矩阵 C=A*B
Matrix C = A.multiply(B);
// 输出三个矩阵以便验证结果是否正确
std::cout<<"Matrix A:"<<std::endl;
A.print();
std::cout<<"\nMatrix B:"<<std::endl;
B.print();
std::cout<<"\nResultant Matrix C(AxB):"<<std::endl;
C.print();
}catch(const std::exception& e){
std::cerr<<e.what()<<'\n';
}
return 0;
}
```
运行以上程序会输出如下结果(假设输入无误):
```
Matrix A:
1 2 3
4 5 6
Matrix B:
7 8
9 10
11 12
Resultant Matrix C(AxB):
58 64
139 154
```
这表明我们的算法成功完成了预期的任务——即按照线性代数中的规定执行了矩阵间对应项的加权累加操作。
阅读全文
相关推荐

















