用C++写一个简易的矩阵运算类

2023-11-11

前段时间做了一个机器人的仿真开发,需要用到矩阵运算,于是自己写了一套,分享出来。
easyMat.h:

class easyMat {
private:
	uint16_t row;
	uint16_t col;
	
public:
         float ** data;
	easyMat(uint16_t r, uint16_t c);
	easyMat(easyMat & e);           
	~easyMat() {                    
		for (auto i = 0; i < row; i++)
			delete[] data[i];
		delete[] data;
	}
	easyMat& operator= (float * d);
	void easyMat_Cout();
	friend easyMat& operator * (const easyMat Mat1, const easyMat Mat2); 
	friend easyMat& operator * (const easyMat Mat, const float k);
};

easyMat.cpp:

easyMat::easyMat(easyMat & e) {               //深拷贝构造函数函数
	row = e.row;
	col = e.col;
	data = new float*[row];
	for (auto i = 0; i < row; i++) {
		data[i] = new float[col];
	}

	for (auto i = 0; i < row; i++)
		for (auto j = 0; j < col; j++)
			data[i][j] = e.data[i][j];
}
easyMat::easyMat(uint16_t r, uint16_t c) :row(r), col(c) {  //构造函数,初始化一个二维指针数组
	data = new float*[row];
	for (auto i = 0; i < row; i++)
		data[i] = new float[col];
}
void easyMat::easyMat_Cout() {                              //将对象的数组打印
	for (auto i = 0; i < row; i++)
		for (auto j = 0; j < col; j++)
			std::cout << data[i][j] << std::endl;
}
easyMat& easyMat::operator = (float *d) {                   //重载"=",实现数组直接初始化data指针
	for (int i = 0; i < this->row; i++) {
		for(int j = 0;j < this->col; j++)
		     data[i][j] = d[i*this->col+j];
	}
	return *this;
}
easyMat& operator * (const easyMat Mat1, const easyMat Mat2) {  //两矩阵相乘
	easyMat * outMat = new easyMat(Mat1.row, Mat2.col);    
	for (auto i = 0; i < Mat1.row; i++) {
		for (auto j = 0; j < Mat2.col; j++) {
			outMat->data[i][j] = 0;
			for (auto m = 0; m < Mat1.col; m++)
				outMat->data[i][j] += Mat1.data[i][m] * Mat2.data[m][j];
		}
	}
	return *outMat;
}  
easyMat& operator* (const easyMat Mat, const float k) {         //矩阵与常数相乘
	easyMat * outMat = new easyMat(Mat.row, Mat.col); 
	for (auto i = 0; i < Mat.row; i++)
		for (auto j = 0; j < Mat.col; j++)
			outMat->data[i][j] = Mat.data[i][j] * k;
	return *outMat;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用C++写一个简易的矩阵运算类 的相关文章

  • MongoDB C# 驱动程序检查身份验证状态和角色

    这是我使用 MongoDB 身份验证机制登录 MongoDB 的代码 try var credential MongoCredential CreateMongoCRCredential test admin 123456 var sett
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • CMake - 将预构建库链接到 C# 项目

    我正在使用 CMake 构建 C 库 该库依赖于已构建的库 dll 我似乎无法让图书馆链接到我的图书馆 我尝试过使用target link libraries mylib external lib 我也尝试过暴力破解 reference e
  • for 循环 - 没有效果的语句

    由于某种原因 我收到错误 statement with no effect关于这个声明 for j idx j lt iter j increment printf from loop idx i int idx punc ctxt j 你
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 【Selenium】获取属性

    文章目录 1 获取窗体属性 1 1 获取网页标题 1 2 获取网址 1 3 获取浏览器名称 1 4 获取网页源码 2 获取元素属性 2 1 获取元素的文本内容 2 2 获取元素属性 2 3 获取其他属性 1 获取窗体属性 1 1 获取网页标
  • 深度学习笔记二:多层感知机(MLP)与神经网络结构

    为了尽量能形成系统的体系 作为最基本的入门的知识 请参考一下之前的两篇博客 神经网络 一 概念 神经网络 二 感知机 上面的两篇博客让你形成对于神经网络最感性的理解 有些看不懂的直接忽略就行 最基本的符号的记法应该要会 后面会用到一这两篇博
  • SpringBoot整合SpringSecurity认证与授权

    唠嗑部分 在项目开发中 权限认证是很重要的 尤其是一些管理类的系统 对于权限要求更为严格 那么在Java开发中 常用的权限框架有哪些呢 推荐的有两种 Shiro 与 SpringSecurity 当然也可以结合切面自己实现 Shiro是Ap
  • 算法分析与设计编程题 递归与分治策略

    棋盘覆盖 题目描述 解题代码 para 棋盘 行偏移 列偏移 特殊行 特殊列 void dividedCovering vector
  • BifroMQ:五分钟了解百度开源旗下消息中间件

    BifroMQ 并不是一个独立的公司 而是由一家名为 Bifrost 的公司开发的一款产品 Bifrost 公司成立于 2014 年 总部位于中国北京 是一家专注于开源技术的公司 当时 Bifrost 公司的创始人陈明发起了开源项目 iPr
  • 一步步开发自己的OS操作系统

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 以MSP430单片机为例控制4个灯以不同频率闪烁 把原理搞清楚了一通则百通 可以举一返三 注 以下所讲的堆栈即栈 因为堆栈说习惯了 堆是堆栈是栈 MSP430有16个寄存器
  • 关于linux服务器上生成的图片中文字为的乱码问题

    一 功能描述 linux服务器后端生成图表 使用了canvas和echarts 并将生成的图片发送到企业微信群里 二 出现的问题 生成的图表中文展示不出来 是乱码 错误图表展示如下 三 文字乱码出现的原因 linux服务器没有对应的文字 四
  • mysql删除以什么开头的数据_Mysql如何删除以“#sql-”开头的临时表

    MySQL如何删除以 sql 开头的临时表 现象 在重建索引后 发现Mysql服务器的磁盘空间快满了 在用如下命令重建索引 mysql gt alter table skatetab add unique index id uid drop
  • java agentlib jdwp,JDWP无依赖攻击

    JDWP JDWP 是 Java Debug Wire Protocol 的缩写 在JPDA Java Platform Debugger Architecture 中 它定义了调试器 debugger 和被调试的 Java 虚拟机 tar
  • LevelHelper-NG

    LevelHelper 的克隆 放在 github上 自取 放一张谍照 Qt4 8 4 vs2010
  • 一些简单的变量以及C语言的基本格式

    一些比较关键的操作 枚举关键 enum MALE REMALE SECRET叫做枚举变量 scanf是C语言提供的 scanf 不是标准C语言提供的而是VS编译器提供的 尽量不要使用会使程序失去可移植性 define CRT SECURE
  • 空时自适应处理用于机载雷达——空时处理基础知识(Matla代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 机载阵列雷达信号环境 2 2 空时处理基础知识 2 3 元素空间空时自适应处理 2
  • 一文了解游戏美术开发流程,以及可能遇到的问题

    想了解典型的游戏资产开发工作流吗 一个团队的游戏美术流程取决于几个因素 包括游戏开发工作室类型 正在开发的游戏类型和开发团队成员的数量等 继续往下阅读 你能了解游戏美术开发流程 所使用的工具 以及可能出现的问题 什么是游戏资产工作流 游戏资
  • windows10内置的Ubuntu系统 开启浏览器界面,安装Xming

    1 安装Xming 2 安装完直接打开 Xming 即可 3 安装一个firefox测试 apt get install firefox 4 运行 在程序指令前加上 DISPLAY 0 DISPLAY 0 firefox 5 简化配置 每次
  • 利用栈来完成表达式求值

    利用栈来完成表达式求值 一个表达式要求值 分为操作数部分和运算符部分 求值的过程便是运算符对操作数进行操作 首先我们定义两个栈 一个栈存放运算符 先放个 进去 代表开始 然后记得结束最后一个字符也是 这样代表结束 然后建立一个栈存放操作数
  • 提车自检手册(3系,其他车辆类似)

    一 检查铭牌 1 检查铭牌车辆生产日期 大于半年pass 玻璃 大灯 轮胎的生产日期不得大于车辆生产日期 二 检查轮胎 1 是否全部为米其林轮胎 zp 4 防爆胎 2 检查全部轮胎日期 4个数字 后俩位年份 前俩位第几周 三 检查玻璃 1
  • 下载百度地图瓦片的方法

    为什么80 的码农都做不了架构师 gt gt gt 续上篇 Web版百度地图加载离线瓦片 本文贴出下载瓦片的简易程序 百度地图瓦片的下载其实很容易 拿到下载链接然后批量下载就行了 不过由于需要按照规则来存储 最好自己写个程序去下载这些链接
  • linux系统中的iscsi网络磁盘共享及其卸载

    什么是ISCSI ISCSI主要是透过TCP IP技术 将存储设备端透过iscsi target iscsi 目标端 功能 做成可以提供磁盘的服务器端 再透过iscsi initiator iscsi初始化用户 功能 做成能够挂载使用使用i
  • 前端学习之Ajax(二)

    1 核心方法 首先对知识进行一下回顾 1 创建一个XMLHttpRequest对象 2 准备发送请求的数据 URL 3 调用XMLHttpRequest对象的open方法 4 调用XMLHttpRequest对象的send方法 5 为XML
  • 用C++写一个简易的矩阵运算类

    前段时间做了一个机器人的仿真开发 需要用到矩阵运算 于是自己写了一套 分享出来 easyMat h class easyMat private uint16 t row uint16 t col public float data easy