C++ 矩阵相乘
#include <iostream>
using namespace std;
#include <vector>
void matrixMatrix(vector<vector<int>>& mat1, vector<vector<int>>& mat2)
{
/*
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
{
cout << mat1[i][j] << " ";
}
cout << endl;
}
cout << "--------------------" << endl;
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
{
cout << mat2[i][j] << " ";
}
cout << endl;
}
*/
cout << "--------------------" << endl;
// 创建一个二维数组
vector<vector<int>> mat;
// A矩阵的行数,A矩阵的列数,B矩阵的行数,B矩阵的列数
int row1 = mat1.size(), col1 = mat1[0].size(), row2 = mat2.size(), col2 = mat2[0].size();
// A矩阵的列数和B矩阵的行数不相等时,矩阵无法相乘
if (col1 != row2)
{
cout << "A矩阵的列数和B矩阵的行数不相等!" << endl;
return;
}
// 构建出 A矩阵的行数 * B矩阵的列数 的新矩阵
// 矩阵A的行数
for (int i = 0; i < row1; ++i)
{
// 创建一个暂存数组
vector<int> v;
// 矩阵B的列数
for (int j = 0; j < col2; ++j)
{
// 暂存新矩阵 C[i][j] 的值
int ans = 0;
// 矩阵A的列数
for (int k = 0; k < col1; ++k)
{
// 矩阵A x轴的数 乘 矩阵B y轴的数,累加得到,新矩阵 C[i][j] 的值
ans = ans + mat1[i][k] * mat2[k][j];
}
// 把值存到暂存数组
v.push_back(ans);
}
// 把暂存数组放到矩阵C
mat.push_back(v);
}
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
{
cout << mat[i][j] << " ";
}
cout << endl;
}
}
int main()
{
// 循环使用的变量
int i = 0, j = 0;
// 暂存数组
vector<int> v;
// 矩阵A
vector<vector<int>> mat1;
// 矩阵B
vector<vector<int>> mat2;
// 构建矩阵A 10 * 10 矩阵
for ( i = 0; i < 10; ++i)
{
for (j = 1; j < 11; ++j)
{
v.push_back(j);
}
mat1.push_back(v);
v.clear();
}
// 构造矩阵B 9 * 10 矩阵
for (i = 0; i < 9; ++i)
{
for (j = 1; j < 11; ++j)
{
v.push_back(j);
}
mat2.push_back(v);
v.clear();
}
matrixMatrix(mat1, mat2);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通