矩阵乘法的计算规则是,若第一个矩阵A的列数等于第二个矩阵B的行数,那么两个矩阵可以相乘得到矩阵C,其中C的第i行第j列元素等于A的第i行所有元素与B的第j列对应元素的乘积之和。在C++中实现这个逻辑,最基础的方式就是使用嵌套循环来逐层遍历计算。

实现前的准备条件
在进行矩阵乘法实现之前,需要先明确几个前提:
- 定义三个二维数组分别存储矩阵A、矩阵B和结果矩阵C
- 确认矩阵A的列数等于矩阵B的行数,否则无法完成乘法运算
- 结果矩阵C的行数等于矩阵A的行数,列数等于矩阵B的列数
核心嵌套循环逻辑
矩阵乘法的计算需要三层嵌套循环:
- 第一层循环遍历结果矩阵的行,对应矩阵A的行索引
- 第二层循环遍历结果矩阵的列,对应矩阵B的列索引
- 第三层循环计算当前行和列的元素乘积之和,遍历矩阵A的列和矩阵B的行
完整代码实现
下面是一个完整的C++矩阵乘法实现示例,包含维度校验和结果输出:
#include <iostream>
using namespace std;
int main() {
// 定义矩阵A的行数和列数
int aRows = 2, aCols = 3;
// 定义矩阵B的行数和列数,这里aCols等于bRows,满足乘法条件
int bRows = 3, bCols = 2;
// 定义结果矩阵C的行数和列数
int cRows = aRows, cCols = bCols;
// 初始化矩阵A
int matrixA[2][3] = {{1, 2, 3}, {4, 5, 6}};
// 初始化矩阵B
int matrixB[3][2] = {{7, 8}, {9, 10}, {11, 12}};
// 定义结果矩阵C,初始化为0
int matrixC[2][2] = {0};
// 第一层循环:遍历结果矩阵的行
for (int i = 0; i < cRows; i++) {
// 第二层循环:遍历结果矩阵的列
for (int j = 0; j < cCols; j++) {
// 第三层循环:计算当前位置的元素值
for (int k = 0; k < aCols; k++) {
matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
// 输出结果矩阵
cout << "矩阵乘法结果:" << endl;
for (int i = 0; i < cRows; i++) {
for (int j = 0; j < cCols; j++) {
cout << matrixC[i][j] << " ";
}
cout << endl;
}
return 0;
}
代码逻辑说明
上述代码中,首先定义了三个矩阵的维度,确保矩阵A的列数等于矩阵B的行数,满足乘法的前提条件。然后通过三层嵌套循环完成计算:
- 外层循环i控制结果矩阵的行,对应矩阵A的行
- 中层循环j控制结果矩阵的列,对应矩阵B的列
- 内层循环k遍历矩阵A的列和矩阵B的行,完成对应元素的乘积累加
最后遍历结果矩阵并输出每个元素的值,上述示例的运行结果为:
58 64
139 154
注意事项
在实际使用嵌套循环实现矩阵乘法时,需要注意以下几点:
- 如果矩阵维度较大,使用普通二维数组可能会存在栈溢出的问题,可以考虑使用动态数组或者vector容器存储矩阵元素
- 一定要先校验矩阵维度是否匹配,否则会出现数组越界或者计算结果错误的问题
- 结果矩阵在初始化时需要将所有元素置为0,否则累加时会带入随机值导致结果错误
用vector容器实现的版本
如果使用C++的vector容器存储矩阵,实现逻辑和二维数组类似,只是存储方式不同:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 用vector定义矩阵A
vector<vector<int>> matrixA = {{1, 2, 3}, {4, 5, 6}};
// 用vector定义矩阵B
vector<vector<int>> matrixB = {{7, 8}, {9, 10}, {11, 12}};
// 获取矩阵维度
int aRows = matrixA.size();
int aCols = matrixA[0].size();
int bRows = matrixB.size();
int bCols = matrixB[0].size();
// 校验维度是否匹配
if (aCols != bRows) {
cout << "矩阵维度不匹配,无法完成乘法" << endl;
return 0;
}
// 初始化结果矩阵C
vector<vector<int>> matrixC(aRows, vector<int>(bCols, 0));
// 嵌套循环计算矩阵乘法
for (int i = 0; i < aRows; i++) {
for (int j = 0; j < bCols; j++) {
for (int k = 0; k < aCols; k++) {
matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
// 输出结果
cout << "vector版本矩阵乘法结果:" << endl;
for (int i = 0; i < aRows; i++) {
for (int j = 0; j < bCols; j++) {
cout << matrixC[i][j] << " ";
}
cout << endl;
}
return 0;
}