讲师中心 微信公众号
AI工具推荐 视频效率加速

c++中如何实现矩阵的加减运算_c++二维数组运算符重载【实例】

老明吖_2045

老明吖_2045

发布时间:2026-01-23 15:58:03

|

697人浏览过

|

来源于php中文网

原创

矩阵加减必须封装为类并重载operator+和operator-,使用std::vector一维存储+行列信息,检查维度匹配,返回新对象,三个const缺一不可,索引按i*cols+j计算。

c++中如何实现矩阵的加减运算_c++二维数组运算符重载【实例】

矩阵加减必须重载 operator+ 和 operator-

不能靠裸指针或原始二维数组直接运算,C++ 不支持对数组类型自动重载运算符。必须封装成类(如 Matrix),把数据存为 std::vector<:vector>></:vector> 或一维 std::vector<double></double> + 行列信息,再在类内定义成员函数形式的运算符重载。

常见错误是试图对 double a[3][3] 重载 + —— 编译器直接报错:error: cannot overload 'operator+' for type 'double [3][3]'。

  • 推荐用一维存储(std::vector<double> data</double>)+ rows/cols 成员,内存连续、缓存友好、避免 vector of vector 的指针跳转开销
  • 运算符应返回新对象(非引用),避免返回局部对象引用或悬垂引用
  • 必须检查维度匹配:加减要求左右操作数 rows 和 cols 完全相等,否则抛 std::invalid_argument

重载函数签名要写成 const 成员 + const 引用参数

典型写法是:Matrix operator+(const Matrix& other) const。三个 const 各有作用:

  • 参数 const Matrix&:避免拷贝,且禁止修改传入矩阵
  • 函数末尾 const:保证不修改当前对象(*this)状态,才能被 const 对象调用
  • 返回值不加 const:允许链式调用(如 a + b + c),C++11 后移动语义也能生效

如果漏掉任意一个 const,可能触发隐式拷贝、编译失败,或导致 const 对象无法参与运算(例如临时对象、const 局部变量)。

立即学习“C++免费学习笔记(深入)”;

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载

一维存储下加减运算的索引计算别写错

假设按行优先存储,元素 (i, j) 对应一维下标是 i * cols + j。加减时必须用这个公式遍历,而不是嵌套 [i][j](那是一维 vector 存 vector 才有的语法)。

错误示例(误当二维访问):

data[i][j] += other.data[i][j]; // 编译不过:data 是 vector<double>,不支持 [][][]

正确写法(一维索引):

for (size_t i = 0; i < rows; ++i) {
    for (size_t j = 0; j < cols; ++j) {
        size_t idx = i * cols + j;
        result.data[idx] = data[idx] + other.data[idx];
    }
}

  • 循环用 size_t(无符号),避免与 int 混合比较引发警告
  • 不要手写 data[i * cols + j] 多次——提取成变量或用 lambda 封装可读性更好
  • 若矩阵很大,可考虑 OpenMP 并行化外层循环,但小矩阵反而因开销得不偿失

构造函数和拷贝控制要同步更新

一旦用了动态存储(std::vector),默认拷贝构造和赋值已足够安全,无需手动写(遵循 Rule of Zero)。但如果自行管理裸指针(如 double* data),就必须显式定义拷贝构造、拷贝赋值、移动构造、析构函数(Rule of Five),否则加减后对象析构会 double-free。

实际项目中强烈建议:用 std::vector,禁用裸 new/delete;所有资源管理交给标准库。

容易被忽略的一点:如果类里加了 operator+= / operator-=,它们应返回 *this(Matrix&),且必须是 non-const 成员函数——否则无法用于 a += b 这种左值场景。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5764

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2384

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1592

2025.10.17

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5764

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2384

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1592

2025.10.17

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

889

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2400

2023.10.25

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn