自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 modbusTcp 从站和主站

主要测试读保持寄存器,地址4xxxx开始。不废话直接上代码下面是从站(server)代码:我们可以通过modscan32工具来读取数据测试。下面是主站(client)代码:

2022-06-29 15:32:35 4220 1

原创 设计模式--单一职责模式之桥模式

“单一职责”模式单一职责模式出现的原由是:在软件设计中,如果出现责任划分不清楚,使用继承得到的结果往往会随需求的变化,子类急剧膨胀,同时充斥重复代码,这个时候的关键就是划清责任。桥模式A:说明桥模式的动机:由于某些类型的固有的实现逻辑,使得他们具有多个变化得维度,带来子类膨胀和重复代码的问题。B:例子(不同平台的邮件信箱收发邮件的实现)1)首先我们想到是一堆的功能接口,将其所有功能接口放到一个纯虚类中,作为基类。同时有想到支持的平台主题,包括PC和Mobile,并继承接口定义的基类,

2021-03-11 11:23:32 130

原创 设计模式--单一职责模式之装饰模式

“单一职责”模式单一职责模式出现的原由是:在软件设计中,如果出现责任划分不清楚,使用继承得到的结果往往会随需求的变化,子类急剧膨胀,同时充斥重复代码,这个时候的关键就是划清责任。装饰模式A:说明其他模式虽然也存在职责问题,但装饰模式在责任划分这块是极其突出的模式之一。另一是桥模式。B:例子(有关io操作)实现一个对文件流/网络流/内存流,进行加密/缓存/加密缓存操作。UML和代码如下://业务操作 公共操作放到纯虚类中class Stream{public:.

2021-03-10 15:19:49 140

原创 图片尺寸,分辨率和像素的理解

图片的尺bai寸和分辨率都是描述图du片的清晰度,图片zhi的尺寸x图片的分辨率=图片的像素dao。两者对于描述zhuan图片清晰度成正比。图片的尺寸是描述一张图片的大小数据,通常描述为“图片长1920、宽1080”。数字图片的“长宽”并非物理意义的长度单位,而是在图片“横”和“竖”这两个维度上包含的像素个数。比如,1920×1080的图片是由横向1920个像素、纵向1080个像素(合计2,073,600个像素)构成的。而图片的分辨率则是指单位面积内的像素数量,即像素密度,单位是dpi(dots p

2021-02-24 17:43:30 6124

原创 图像旋转--利用opencv,cuda-npp的实现。

一,软件开发中,某些场景需要旋转图像,本文注意处理的是旋转图像90°,180°,270°。任意角度的旋转不涉及。注意选择观看。图像的旋转可以利用opencv实现cpu完成,也可以通过cuda中的npp工具实现gpu完成,gpu的效率要比cpu搞很多。具体代码片段如下:二,opencv代码实现:1,实现如下:void rotateImage(int degree) { cv::Mat srcCopy; cv::Mat src_img = imread("./bird.jpg", IMR

2020-11-14 17:45:29 1518

原创 取模运算的理解和应用

软件开发过程中,总会遇到取余,取模,取整的计算或者思想,这里小结一下。取模和取余,这两个运算在真整数的时候是一个概论,在负整数进行除法运算时不同。符号:“ % ”。取整:即求商。符号:“ / ”。取模和取余的区别取余运算,在计算商值时,商值向0方向舍入,靠近0原则。 取模运算,在计算商值时,商值向负无穷方向舍入;尽可能让商值小的原则(不超多商值的最大值)。 例子:取模简述 商值 取模值 5 mod 3 = 2 5/3 = 1.66 商取小原则 商=1.

2020-07-01 10:11:10 10301 1

原创 c++管理虚方法之override和final

零,背景c++中,多态的核心,就是希望通过基类访问派生类中重写(overload)的虚方法,来实现不同派生类的不同响应。但虚方法带来一些编程陷阱。如,派生类中继承了基类的虚方法,提供了不同的版本,将会出现隐藏(shadow),覆盖旧版本。如下:class Base{public: virtual void func(char ch) const {}};class Bingo: public Base{public: virtual void func(char *ch.

2020-06-30 12:30:03 387

原创 c++的常量折叠

何谓常量折叠?常量折叠就是将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。(预编译阶段)接下来我们通过一段代码来分析一下了解一下常量折叠及其特性:int main(){ const int a = 10; int b = 2*a; int c = b; int *p = (int*)&a; *p = 100; cout << a << endl;//输出10 cout&lt...

2020-06-29 15:54:42 625

原创 const 关键字

一,C语言中的const在c语言中, const 不是常量,只能说是不可改变的变量,c编译器,不能将const修饰的变量看成一个编译期间的常量,因为其在内存中有分别,c编译器不能知道在编译期间的值,所以不能作为数组定义的下标。const int a=10;int Array[b]; //编译错误const 类名 变量名 与 类名 const 变量名 同义 1,初始化问题在c语言中,const int a;因为a只是个变量,且只会分配存储在“只读数据段”中内存,只读数据段中存放着常量

2020-06-27 21:17:55 190

原创 数据结构与算法--排序(二)

一,前言归并排序和快速排序都用了分治的思想,来解决排序的问题。二,归并排序的原理归并排序的核心思想

2020-06-19 13:07:57 196

原创 指针和引用

一,指针1,指针的含义指针是一种特殊的遍历,其存储的值被解释成内存里的一个地址。要理解一个指针需要搞清指针的四方面内容:指针的类型,指针所指向的类型,指针的值(指针所指向的内存地址),指针本身所占据的内存地址。指针的类型从语法的角度说,指针的类型,只要把指针声明语句中的指针名去掉,剩下的部分就是指针类型。例如:int *ptr; //指针类型是int*int **ptr; //指针类型是int**int (*ptr)[3]; //指针类型是int(*)[3]int

2020-06-17 13:36:48 115

原创 数据结构与算法--排序(一)

排序算法很多,其中最经典,最常用的:冒泡排序 ,插入排序,选择排序,归并排序,计数排序,基数排序,桶排序。大致可以分为三类,如图:带着思考学习:插入排序和冒泡排序的时间复杂度相同,都是,在实际的软件开发 里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?一,如何分析一个“排序算法”学习排序算法,除了学习它的算法原理,代码实现外,还需要分析一个排序算法,要分析一个排序算法,需要从下几个方面入手:...

2020-06-08 13:17:47 217

原创 数据结构与算法--递归

零,递归的典例递归的例子。 周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办? 别忘了你是程序员,这个可难不倒你,递归就开始排上用场了。于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但 是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传回来。直到你前面的人告诉你他在哪一排,于是你就知道答案了。一,如何理解“递归”数据结

2020-05-10 10:36:34 377

原创 数据结构--队列

一,如何理解“队列”可以把队列想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。 栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队enqueue(),放一个数据到 队列尾部;出队dequeue(),从队列头部取一个元素。如图:队列也是一种操作受限的线性表数据结构。队列作为一种非常基础的数据结果,队列的应用也非常广泛,特别是一些具有某些额外特性的队列,例如循环队列,阻塞队列,并发

2020-05-09 15:09:41 274

原创 数据结构--栈

一,如何理解“栈”关于“栈”,有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地 依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。从栈的操作特性上看,栈是一种“操作受限”的线性表,只允许一个在插入和删除数据。二,如何实现一个“栈”栈的注意操作包含两个操作,入栈和出栈,即在栈...

2020-05-09 09:53:11 137

原创 数据结构--链表(二)

如何轻松写出正确的链表代码?技巧一:理解指针或引用的含义

2020-05-06 15:49:39 96

原创 数据结构--链表(一)

一,五花八门的链表结构1,与数组的区别先看下图:可以看出,数组需要一块连续的内存空间来存储,对内存要求比较高,链表恰恰相反,不需要一块连续的内存,通过“指针”将一组零散的内存块串联起来。链表五花八门,最常见的三种链表结构:单链表,双向链表和循环链表。2,单链表单链表存在两个特殊节点,一个作为基地址的头结点还有一个是指向为NULL地址的尾结点。与数组一样,链表也支持数据的...

2020-04-28 15:00:42 151

原创 数据结构-数组

一,为何数组的下标都是从0开始

2020-04-27 22:35:18 156

原创 序幕

一、学习的目的是什么? 建立对代码的时间复杂度和空间复杂度意识,写出高指令的代码,能够设计基本架构,提升编码能力,训练逻辑思维。而非为了死记硬背几个知识点。二、数据结构和算法是什么? 1、数据结构是指一组数据的存储结构。 2、算法就是操作数据的方法 。 3、数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上。三、学习的重...

2020-04-27 20:15:21 200

原创 复杂度分析与统计

时间,空间复杂度分析一,如何评估代码的时间,空间复杂度。 在运行时,通过添加运行的统计时间来衡量代码的性能,受硬件的性能并受测试数据的规模两个局限性,不能很好的评估。一般我们用“肉眼”来评估算法的执行效率,粗略地讲,就是算法代码执行的时间。二,如何用“肉眼”来评估(大O 复杂度表示法) 从CPU的角度来看,每一行代码都执行着类似的操作:读数据-运算-写数据。我们粗略...

2020-04-27 20:15:01 203

原创 .gitignore文件的使用说明

学习参考文章:https://www.cnblogs.com/kevingrace/p/5690241.html1,GIT忽略规则(.gitignore配置)作用:忽略文件追踪2,使用: 1)将需要忽略的文件添加到 .gitignore中。 2).gitignore的作用是其所处目录和子目录, 所以可...

2020-04-19 14:26:14 245

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除