C++已经有许多实现矩阵运算的库,这些库功能齐全,但是有些时候我们可能只需要用到矩阵的加减法等简单的功能,这时候引入这些库显得有些大材小用。这时候,使用STLvector类并重载operator+来实现矩阵或者向量的加减就十分方便。

但是,我们在处理一维和二维,甚至三维的矩阵时,可能会对不同类型的vector进行重复的重载,这无疑使代码显得有些冗余,而且不易维护。这时,自然想到利用C++的模板来对这一功能进行实现。

#include <iostream>
#include <vector>
#include <exception>using namespace std;typedef unsigned int uint;class different_length : public exception //两相加向量维度不一样的异常
{private:string message;public:different_length() : message("Different length!") {}different_length(string str) : message("Error : " + str) {}~different_length() throw(){}virtual const char *what() const throw(){return message.c_str();}
};template <typename T>
vector<T> operator+(const vector<T> &a, const vector<T> &b)
{if (a.size() != b.size()){throw different_length();}vector<T> re;for (uint i = 0; i < a.size(); i++){re.push_back(a[i] + b[i]);}return re;
}int main()
{vector<vector<int>> nums1 = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};vector<vector<int>> nums2 = {{1, 1, 1},{2, 2, 2},{3, 3, 3}};vector<vector<int>> nums3 = nums1 + nums2;for (uint i = 0; i < nums3.size(); i++){for (uint j = 0; j < nums3[0].size(); j++){cout << nums3[i][j] << " ";}cout << endl;}return 0;
}

这样,通过一次重载,可以实现不同维度vector的加法运算。

另外需要注意的一点是,假如包含向量与二维矩阵混合的乘法运算,最好统一用二维的vector来表示向量或者矩阵,比如用:

vector<vector<int>> nums = {{1, 2, 3}};

替代

vector<int> = {1, 2, 3};

这样在写向量或者矩阵的乘除法时,无需对只有一行的向量进行分类讨论。

C++使用模板重载vector的加减法实现矩阵向量加减法相关推荐

  1. STL模板之vector与sort的使用

    STL模板之vector与sort的使用 @(算法学习) 题目描述 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩.都按先录入排列在前的规则处理. 例示: jack ...

  2. c++使用vector求两个矩阵相乘

    c++使用vector求两个矩阵相乘 直接上代码 #include <vector> #include <iostream> using namespace std;vecto ...

  3. 自定义类模板 重载遇到的问题

    类内声明 friend ostream& operator<<(ostream& os,const store<T> &item); 类外实现 temp ...

  4. 函数模板,函数模板重载,可变参数模板,函数模板覆盖,通过引用交换数据

     1.函数模板初级,如果想使用模板,需要实例化,实例化的方式是加上<数据类型> #include <iostream> //函数模板可以对类型进行优化重载,根据类型会覆盖 ...

  5. 类模板 重载运算符 易错

    在类模板中定义重载运算符模板函数,易错地方如下 例 错误(1) #include <iostream> using namespace std; template <typename ...

  6. STL(标准模板库)—Vector

    目录 Vector 1.创建一个名为V的vector容器 整型数组 2.vector容器中存放自定义的数据类型 3.vector容器嵌套容器 Vector遍历打印函数 vector容器_构造函数 1. ...

  7. C++运算符重载 实现有理数(分数)的加减法

    在main前面打一个断电,单步调试,整个程序更易理解. #include<iostream> #include<string> #include<stdlib.h> ...

  8. 【邻接表存图模板】vector邻接表、数组邻接表、链式前向星

    一.目录 一.目录 二.前言 三.邻接表"详解" (一)边的信息 (二)几种邻接表的实现方法"详解" 1.数组邻接表 代码 2.vector邻接表 代码 vec ...

  9. 向量加减法首尾规律_向量加减口诀首尾相接

    向量的加法口诀:首尾相连,首连尾,方向指向末向量.向量的减法口诀:首首相连,尾连尾,方向指向被减向量. 三角形定则解决向量加减的方法 将各个向量依次首尾顺次相接,结果为第一个向量的起点指向最后一个向量 ...

  10. 需求跟踪矩阵模板_需求可追溯性矩阵(RTM)生成程序使用说明

    需求可追溯性矩阵 ( Requirements Traceability Matrix ,简称RTM)ISPE中的定义如下: 需求跟踪矩阵需求追溯矩阵(RTM)是一个将整个验证过程中的需求联系起来的文 ...

最新文章

  1. F5负载均衡会话保持技术及原理技术白皮书
  2. 深入浅出WPF——附加事件(Attached Event)
  3. [YTU]_2917(Shape系列-3)
  4. 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!
  5. 智联招聘简历如何导出html,如何将拉勾网(智联招聘)的预览简历导出来
  6. 预处理器sass_Sass — Web的预处理器装饰
  7. Tensorflow 学习二 tf.Session().run
  8. 添加毛玻璃的两中方法
  9. String与Date、Timestamp互转
  10. ubuntu10.04里安装spidermonkey
  11. caffe测试单张图片
  12. android之仿朋友圈程序,Android仿微信朋友圈添加图片的实例代码
  13. CFAR检测MATLAB仿真
  14. 用户粘性︱如何提升用户忠诚度
  15. 在Debian Linux下用MAME模拟器玩街机游戏
  16. 服务器端查看图片库 eog
  17. 如何按要求批量修改Excel工作表名称
  18. JDBC 基础、CRUD、分页 第一节
  19. 一键获取前程无忧招聘信息,并存储到excel中,全程只需要输入职位名称(51job 你要的自动化 这里全都有~~~)
  20. swap未禁用导致的k8s NotReady

热门文章

  1. ssm启动不报错_ssm整合 启动表现层报错。。。
  2. 河南公务员写古文辞职信:陡增酒量 武功尽废
  3. XSS 之 haozi me 题解——人生第一份CSDN题解
  4. 服务器外链图片不显示,新浪图床已限制图片外链使用(附解决方法)
  5. Roaring Bitmaps结构原理
  6. IE8 正式版官方下载链接
  7. 如何在51单片机实现日程提醒(生日闹钟)
  8. 苹果支付Java服务器实现
  9. Debian7安装NVIDIA显卡驱动
  10. 朝闻道,夕死可矣。究竟闻的是什么道?