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;    
}
posted @   萨塔妮娅  阅读(465)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示