当前位置: 首页 > article >正文

【C++】使用std::vector()函数实现矩阵的加、减、点乘、点除等运算

本文通过vector()函数表示矩阵的形式,对 加、减、点乘、点除等运算进行编码和运行,相应结果如下文所述。

#include <iostream>
#include <vector>


using namespace std;

// 矩阵加法
vector<vector<int>> add(vector<vector<int>>& A, vector<vector<int>>& B) {
    vector<vector<int>> result(A.size(), vector<int>(B[0].size()));
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < B[0].size(); j++) {
            result[i][j] = A[i][j] + B[i][j];
        }
    }
    return result;
}

// 矩阵减法
vector<vector<int>> subtract(vector<vector<int>>& A, vector<vector<int>>& B) {
    vector<vector<int>> result(A.size(), vector<int>(B[0].size()));
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < B[0].size(); j++) {
            result[i][j] = A[i][j] - B[i][j];
        }
    }
    return result;
}

// 矩阵点乘
vector<vector<int>> dot_product(vector<vector<int>>& A, vector<vector<int>>& B) {
    vector<vector<int>> result(A.size(), vector<int>(B[0].size()));
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < B[0].size(); j++) {
            result[i][j] = 0;
            for (int k = 0; k < A[0].size(); k++) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    return result;
}

本文通过vector表示矩阵的内容,进行加、减、点乘、点除四种运算示例,包含代码和运行结果,可直接运行。

// 矩阵点除
vector<vector<int>> divide(vector<vector<int>>& A, vector<vector<int>>& B) {
    vector<vector<int>> result(A.size(), vector<int>(B[0].size()));
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < B[0].size(); j++) {
            result[i][j] = A[i][j] / B[i][j];
        }
    }
    return result;
}

void printMatrix(const vector<vector<int>>& matrix) {
    for (const auto& row : matrix) {
        for (const auto& element : row) {
            cout << element << ' '; // 可以按你的需求更改分隔符,例如使用逗号或制表符等。这里使用空格作为分隔符。
        }
        cout << '\n'; // 每行结束后换行。你可以更改或删除此行,根据你的需求。
    }
}
int main() {
    // 测试矩阵加法
    vector<vector<int>> A = { {1, 2}, {3, 4} };
    vector<vector<int>> B = { {5, 6}, {7, 8} };
    vector<vector<int>> C = add(A, B);
    cout<<"加法运算:" << endl;
    printMatrix(C);
 

    // 测试矩阵减法
    cout << "减法运算:" << endl;
    vector<vector<int>> D = subtract(A, B);
    printMatrix(D);

    // 测试矩阵点乘
    cout << "点乘运算:" << endl;
    vector<vector<int>> E = dot_product(A, B);
    printMatrix(E);
    cout << "点除运算:" << endl;
    // 测试矩阵点除
    vector<vector<int>> F = divide(A, B);
    
    printMatrix(F);
    return 0;
}

上述代码主要定义了四个操作矩阵的函数:加法、减法、点乘和点除,以及一个打印矩阵的函数。

**add 函数:**这个函数实现了两个矩阵的加法操作。它首先创建一个新的矩阵,大小与输入的两个矩阵相同,然后逐个元素地加上两个输入矩阵的对应元素。
**subtract 函数:**这个函数实现了两个矩阵的减法操作。它首先创建一个新的矩阵,大小与输入的两个矩阵相同,然后逐个元素地减去两个输入矩阵的对应元素。
**dot_product 函数:**这个函数实现了两个矩阵的点乘操作。它首先创建一个新的矩阵,大小与输入的两个矩阵相同,然后逐个元素地计算两个输入矩阵的对应元素的乘积,并把乘积相加。
**divide 函数:**这个函数实现了两个矩阵的点除操作。注意,这段代码并未处理除数为0的情况。在实际应用中,你需要添加额外的处理逻辑来应对除数为0的情况。
**printMatrix 函数:**这个函数用于打印一个矩阵。它通过嵌套循环来遍历矩阵的每一个元素,并打印出来。每个元素之后都有一个空格,每行结束之后会换行。
**在 main 函数中,**这段代码用两组示例矩阵测试了上述四个函数,并使用 printMatrix 函数打印了结果。

**注意:**由于这段代码并未处理除数为0的情况,所以在实际使用 divide 函数时,需要添加额外的逻辑来处理除数为0的情况,否则可能会导致运行时错误。

输出结果如下图所示:
在这里插入图片描述


http://www.kler.cn/news/136250.html

相关文章:

  • mysql 通过GROUP BY 聚合并且拼接去重另个字段
  • 数据结构------手撕链表(一)【不带头单向非循环】
  • 计算机网络:网络层 —— IPv4 协议的表示方法及其编址方法
  • 设计模式: Pimpl(Pointer to Implementation)
  • Android 添加菜单开关控制Camera相机和第三方相机
  • C++对象模型:关于对象
  • 【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索
  • React 中 react-i18next 切换语言( 项目国际化 )
  • mysql5.6 修改密码
  • Nosql之redis概述及基本操作
  • C++二分算法:找到最接近目标值的函数值
  • 用css实现原生form中radio单选框和input的hover已经focus的样式
  • DRF纯净版项目搭建和配置
  • ExcelBDD PHP Guideline
  • 从0开始学习JavaScript--JavaScript使用Promise
  • 虹科示波器 | 汽车免拆检修 | 1994款凯迪拉克fleetwood车发动机无法起动
  • 论文阅读:“iOrthoPredictor: Model-guided Deep Prediction of Teeth Alignment“
  • 访问限制符说明面向对象的封装性
  • 【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)
  • leetcode做题笔记2736. 最大和查询
  • 管家婆订货易在线商城任意文件上传漏洞复现
  • Pinia的使用
  • 读像火箭科学家一样思考笔记04_第一性原理(下)
  • MATLAB算法实战应用案例精讲-【神经网络】Transformer
  • K8S(一)
  • maven升级版本后报错:Blocked mirror for repositories