C++使用模板重载vector的加减法实现矩阵向量加减法
C++已经有许多实现矩阵运算的库,这些库功能齐全,但是有些时候我们可能只需要用到矩阵的加减法等简单的功能,这时候引入这些库显得有些大材小用。这时候,使用STL的vector
类并重载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的加减法实现矩阵向量加减法相关推荐
- STL模板之vector与sort的使用
STL模板之vector与sort的使用 @(算法学习) 题目描述 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩.都按先录入排列在前的规则处理. 例示: jack ...
- c++使用vector求两个矩阵相乘
c++使用vector求两个矩阵相乘 直接上代码 #include <vector> #include <iostream> using namespace std;vecto ...
- 自定义类模板 重载遇到的问题
类内声明 friend ostream& operator<<(ostream& os,const store<T> &item); 类外实现 temp ...
- 函数模板,函数模板重载,可变参数模板,函数模板覆盖,通过引用交换数据
1.函数模板初级,如果想使用模板,需要实例化,实例化的方式是加上<数据类型> #include <iostream> //函数模板可以对类型进行优化重载,根据类型会覆盖 ...
- 类模板 重载运算符 易错
在类模板中定义重载运算符模板函数,易错地方如下 例 错误(1) #include <iostream> using namespace std; template <typename ...
- STL(标准模板库)—Vector
目录 Vector 1.创建一个名为V的vector容器 整型数组 2.vector容器中存放自定义的数据类型 3.vector容器嵌套容器 Vector遍历打印函数 vector容器_构造函数 1. ...
- C++运算符重载 实现有理数(分数)的加减法
在main前面打一个断电,单步调试,整个程序更易理解. #include<iostream> #include<string> #include<stdlib.h> ...
- 【邻接表存图模板】vector邻接表、数组邻接表、链式前向星
一.目录 一.目录 二.前言 三.邻接表"详解" (一)边的信息 (二)几种邻接表的实现方法"详解" 1.数组邻接表 代码 2.vector邻接表 代码 vec ...
- 向量加减法首尾规律_向量加减口诀首尾相接
向量的加法口诀:首尾相连,首连尾,方向指向末向量.向量的减法口诀:首首相连,尾连尾,方向指向被减向量. 三角形定则解决向量加减的方法 将各个向量依次首尾顺次相接,结果为第一个向量的起点指向最后一个向量 ...
- 需求跟踪矩阵模板_需求可追溯性矩阵(RTM)生成程序使用说明
需求可追溯性矩阵 ( Requirements Traceability Matrix ,简称RTM)ISPE中的定义如下: 需求跟踪矩阵需求追溯矩阵(RTM)是一个将整个验证过程中的需求联系起来的文 ...
最新文章
- F5负载均衡会话保持技术及原理技术白皮书
- 深入浅出WPF——附加事件(Attached Event)
- [YTU]_2917(Shape系列-3)
- 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!
- 智联招聘简历如何导出html,如何将拉勾网(智联招聘)的预览简历导出来
- 预处理器sass_Sass — Web的预处理器装饰
- Tensorflow 学习二 tf.Session().run
- 添加毛玻璃的两中方法
- String与Date、Timestamp互转
- ubuntu10.04里安装spidermonkey
- caffe测试单张图片
- android之仿朋友圈程序,Android仿微信朋友圈添加图片的实例代码
- CFAR检测MATLAB仿真
- 用户粘性︱如何提升用户忠诚度
- 在Debian Linux下用MAME模拟器玩街机游戏
- 服务器端查看图片库 eog
- 如何按要求批量修改Excel工作表名称
- JDBC 基础、CRUD、分页 第一节
- 一键获取前程无忧招聘信息,并存储到excel中,全程只需要输入职位名称(51job 你要的自动化 这里全都有~~~)
- swap未禁用导致的k8s NotReady