自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(441)
  • 资源 (4)
  • 收藏
  • 关注

原创 C++设计模式_22_Chain of Resposibility 职责链(理解,已过时)

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链(单向链表),并沿着这条链传递请求,直到有一个对象处理它为止。----《设计模式》GoFChain of Responsibility 模式的应用场合在于“一个请求可能有多个接受者,但是最后真正的接受者只有一个”这时候请求发送者与接受煮的耦合有可能出现”变化脆弱”的症状,职责链的目的就是将二者解耦,从而好地应对变化。

2023-10-31 16:17:42 155

原创 C++设计模式_21_Iterator 迭代器(理解;面向对象的迭代器已过时;C++中使用泛型编程的方式实现)

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。----《设计模式》GoFGoF中最早提出面向对象对象的方式实现迭代器,但是在讲面向对象的方式之前,需要重点说一下,这种方式在C++今天来讲已经过时了,因为学过STL泛型编程的都知道泛型编程中存在迭代器,思想与今天所讲的是一样的,都是通过一种接口的方式来隔离算法和容器之间的变化,但是GoF当初定义是面向对象的方式来定义的。迭代抽象:访问一个聚合对象的内容而无需暴露它的内部表示。

2023-10-31 14:15:07 159

原创 C++设计模式_20_Composite 组合模式

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性(稳定)。----《设计模式》GoF这里的一致性指下面的代码在使用时,不论是树节点还是叶子结点,使用方法都是一致的。Composite模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化为“一对一”的关系,使得客户代码可以一致地(复用)处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器。如果不使用那个核心代码//多态调用,就需要在。

2023-10-30 16:05:07 214

原创 C++设计模式_19_Memento 备忘录(理解,目前多使用序列化方案来实现)

在不破坏(Originator)封装性的前提下,捕获一个对象的内部状态(Memento mem = orginator.createMomento()😉,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。----《设计模式》GoF备忘录(Memento)存储原发器(Originator)对象的内部状态,在需要时恢复原发器状态。Memento模式的核心是信息隐藏,即Originator需要向外界隐藏信息,保持其封装性。但同时又需要将状态保持到外界(Memento)

2023-10-30 14:36:03 104

原创 C++设计模式_18_State 状态模式

允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。----《设计模式》GoFState模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦。为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转换是原子性的–即要么彻底转换过莱,要么不转换。

2023-10-30 11:25:14 511

原创 C++设计模式_17_Mediator 中介者

用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互引用(编译时依赖运行时依赖),从而使其耦合松散 (管理变化),而且可以独立地改变它们之间的交互。—《设计模式》GoF最经典的依赖倒置原则,A本来依赖B,转换为A依赖IB,B依赖IA,难道A从此和B没关系了吗?不是的,你会发现运行时A和B还产生依赖关系,只不过依赖关系从编译时转换到了运行时。

2023-10-28 22:15:04 299

原创 C++设计模式_16_Adapter 适配器

将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。----《设计模式》GoFAdapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。GoF23定义了两种Adapter模式的实现结构:对象适配器和类适配器。但类适配器采用“多继承”的实现方式,一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

2023-10-28 17:42:21 191

原创 C++设计模式_15_Proxy 代理模式

为其他对象提供一种代理以控制(隔离,使用接口) 对这个对象的访问。—《设计模式》GoF“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。

2023-10-28 10:20:07 326

原创 C++数据结构X篇_25_堆排序(不稳定的排序)

堆排序就是永远把最大或最小的数扔在顶上。升序排序:利用最大堆进行排序降序排序:利用最小堆进行排序。

2023-10-27 15:48:38 107

原创 C++设计模式_14_Facade门面模式

为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。----《设计模式》 GoF从客户程序的角度来看,Facade模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种“解耦”的效果一一内部子系统的任何变化不会影响到Facade接口的变化。Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。

2023-10-26 16:28:17 286

原创 C++数据结构X篇_24_归并排序(稳定的排序)

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层(递归)折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的。归并排序基本思想:将两个有序序列合并成一个有序序列。

2023-10-26 14:59:55 87

原创 C++设计模式_13_Flyweight享元模式

运用共享技术有效地支持大量细粒度的对象。–《设计模式》GoF比如说字符串,字符串在系统中使用的量是非常大的,占用的内存也是比较大的,常见的系统包括stl等都用了一定的共享技术,java和C#会在编译器层面用一些共享技术。除了字符串,线程也是一类例子。面向对象很好地解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向对象的代价问题,一般不触发面向对象的抽象性问题。

2023-10-25 16:18:58 325

原创 C++数据结构X篇_23_快速排序(最快、不稳定的排序)

快速排序(Quick Sort)是从冒泡排序算法演变而来的,实际上是在冒泡排序基础上的递归分治法。快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。

2023-10-25 14:39:51 582 1

原创 C++数据结构X篇_22_希尔排序(不稳定的排序)

希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法。

2023-10-25 10:43:03 204

原创 C++数据结构X篇_21_插入排序(稳定的排序)

因为不知道数组中得前几个元素是已经有序的,所以直接从第二个元素开始执行插入排序,将每个元素都进行一次插入排序。当原序列的长度很小时,即便它的所有元素都是无序的,此时进行的元素比较和移动的次数还是很少。当待排序的原序列中大多数元素都已有序的情况下,此时进行的元素比较和移动的次数较少;插入排序是一种最简单直观的排序算法,它的工作原理是。后篇介绍的希尔排序就是基于上面2个性质的改进。

2023-10-24 21:35:14 606

原创 C++设计模式_12_Singleton 单件模式

总体来说,如果是单线程使用版本1已经是足够好了;如果是多线程,使用版本2是OK的,但是效率不高;双检查锁在不使用volatile不能用,是很容易出现问题的;C++11版本之后跨平台实现双检查锁就使用的是最后一个版本保证一个类仅有一个实例,并提供一个该实例的全局访问点–《设计模式》GoFSingleton模式中的实例构造器可以设置为protected以允许子类派生Singleton模式一般不要支持拷贝构造函数和Clone接口,因为这有可能导致多个对象实例,与Singleton模式的初衷违背。

2023-10-24 15:39:22 199

原创 C++数据结构X篇_20_选择排序(不稳定的排序)

选择排序:相对于冒泡排序,减少了交换次数,下图展示了选择排序的原理,具体仍需要结合代码分析。运行结果:时间消耗424ms,比冒泡排序改进版的时间消耗也少了很多。

2023-10-23 22:42:18 174

原创 C++数据结构X篇_19_排序基本概念及冒泡排序(重点是核心代码,冒泡是稳定的排序)

如果在序列中有两个数据元素r[i]和r[j],它们的关键字 k[i]==k[j],且在排序之前,对象 r[i]排在r[j]前面。如果在排序之后,对象 r[i]仍在r[j]前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。排序时需要比较的关键字多余一个,排序结果首先按关键字 1 进行排序,当关键字1相同时按关键字 2 进行排序,当关键字 n-1 相同时按关键字n进行排序,对于多关键字排序,只需要在比较操作时同时考虑多个关键字即可!排序是计算机内经常进行的一种操作,其目的是将一组。

2023-10-23 22:02:21 611 1

原创 C++设计模式_11_builder 构建器(小模式,不太常用)

两种形式均是属于builder构建器模式;根据类的复杂程度决定使用形式1或者形式2,简单的情况下使用形式1,复杂的情况下使用形式2将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。——《设计模式》GoF如果只是做到最初的版本已经够了,最后复杂的版本是考虑将一个复杂对象的构建与其表示相分离,House是表示,HouseBuilder是构建。i < 4;

2023-10-23 15:07:49 226

原创 I.MX6U开发板上的Qt串口编程

在正点原子的 I.MX6U 开发板的出厂系统里,默认已经配置了两路串口可用。一路是调试串口UART1(对应系统里的节点/dev/ttymxc0),另一路是UART3(对应系统里的节点/dev/ttymxc2)。由于 UART1 已经作为调试串口被使用。所以我们只能对 UART3 编程,(如需要使用多路串口,请自行设计底板与系统)。Qt 串口的使用示例,应用到正点原子 I.MX6U 开发板上。

2023-10-22 17:19:08 126

原创 C++设计模式_10_ Prototype 原型模式(小模式,不太常用)

使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。——《设计模式》GoF“原型实例”就是在MainForm中的,这里的“拷贝”是深克隆。Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象一-所需工作仅仅是注册一个新类的对象 (即原型),然后在任何需要的地方Clone。

2023-10-20 15:22:01 498

原创 C++设计模式_09_Abstract Factory 抽象工厂

/数据库访问有关的基类public://支持SQL Serverpublic://支持Oraclepublic://关联性//关联性因为这3个factory特别有相关性,那用1个factory就可以了,将这3个类放在一起,实现高内聚松耦合。大家看到这里就发现使用一个工厂,这就保证了关联性,解决了上面提到问题。从上面的代码可以看出Abstract Factory 其实被称为。

2023-10-20 13:26:22 204

原创 C++数据结构X篇_18_二叉树的创建(根据遍历结果创建二叉树;#号法创建树)

创建树,让树的每一个节点都变成度数为 2的树先序遍历结果:124###3## (#代表null即空)

2023-10-19 15:08:33 186

原创 C++设计模式_08_Factory Method工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。​ ——《设计模式》GoF//工厂基类public://具体工厂public:......Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。

2023-10-19 13:59:52 402

原创 C++数据结构X篇_17_C++实现二叉树的非递归遍历(企业链表实现栈,利用栈的先进后出特点实现二叉树的非递归遍历)

本篇参考进行整合介绍。在中我们实现二叉树通过递归遍历实现了先序、中序与后续遍历,那么如何通过非递归遍历实现先序、中序与后续遍历呢?

2023-10-18 21:52:15 122

原创 C++数据结构X篇_16_二叉树的拷贝和释放(采用递归的方法)

在上篇的基础上,本篇介绍如何进行二叉树的拷贝和释放。从代码中可以看到采用递归方式进行的拷贝、释放操作,基本套路都是一样的。

2023-10-17 22:32:51 531

原创 C++数据结构X篇_15_求二叉树叶子数与高度(递归方法)

本篇参考进行整理。

2023-10-17 21:38:18 294

原创 C++设计模式_07_Bridge 桥模式

将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。​ ——《设计模式》GoFBridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自纬度的变化,即“子类化”它们。

2023-10-08 15:52:20 193

原创 C++设计模式_06_Decorator 装饰模式

动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。——《设计模式》GoF通过采用组合而非继承的手法, Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的“灵活性差”和“多子类衍生问题”。Decorator类在接口上表现为is-aComponent的继承关系,即Decorator类继承了Component类所具有的接口。但在实现上又表现为has-a。

2023-09-24 19:07:17 310

原创 Qt使用I.MX6U开发板上的按键(原理:将电脑键盘方向键↓在Qt中的枚举值与开发板中按键定义的枚举值一致,这样电脑端测试效果就与开发板的一致)

我们在本例中使用 Key_Down(键盘方向键↓)在Windows/Ubuntu 上测试,在开发板上还是使用 KEY0 按键测试。在开发板监测这个 KEY0 有很多方法。比如使用 C 语言开一个线程监测这个按键,或者按本例重写键盘事件来监测 KEY0 按键按下或者松开。项目简介: 监测 KEY0 按键的按下和松开。使用一个标签文本, 通过按键按下来改变标签文本的文字属性。

2023-09-21 22:22:37 712

原创 C++数据结构X篇_14_二叉树的递归遍历(先序遍历、中序遍历、后续遍历方法介绍;举例;代码实现)

指按某条搜索路线遍访每个结点且不重复(又称周游)。//定义二叉树节点public:char ch;//节点数据域//左孩子//右孩子。

2023-09-17 10:54:25 164

原创 C++数据结构X篇_13_二叉树基本概念、性质及表示法

n(n≥0)个结点的有限集合,由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。int data;int data;//左右孩子指针三叉链表示法相对于二叉链表示法,多了一个结构体指针,指向爹。

2023-09-15 22:43:32 230

原创 C++数据结构X篇_12_树的基本概念和存储

由一个或多个(n≥0)结点组成的有限集合 T,有且仅有一个结点称为根(root),当n>1时,其余的结点分为m(m≥0)个互不相交的有限集合T1,T2,…,Tm。每个集合本身又是棵树,被称作这个根的子树。

2023-09-13 23:02:52 235

原创 C++57个入门知识点_番外4_静态链接与动态链接中LIB和DLL的区别与使用

动态链接中的LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。静态链接中的LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

2023-09-13 16:08:41 116

原创 C++设计模式_05_Observer 观察者模式

定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。——《设计模式》 GoF使用面向对象的抽象, Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。代码中随便添加观察者,但是addIProgress,removeIProgress,onProgress保持复用性不变目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。//发送通知。

2023-09-12 22:43:59 534

原创 C++设计模式_04_Strategy 策略模式

定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。--《设计模式》 GoF什么是互相替换,就是支持变化。上面程序中SalesOrder独立于税法的变化,SalesOrder是稳定的。Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。运行时传递多态的对象,//多态调用运行时支持多态的调用Strategy模式提供了用条件判断语句。

2023-09-11 22:18:52 575

原创 Qt点亮I.MX6U开发板的一个LED

本篇开始将会介绍与开发版相关的Qt项目,首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到,但是后期还是将I.MX6U的学习作为重点。

2023-09-10 19:37:18 535

原创 C++数据结构X篇_11_C++栈的应用-后缀表达式求解

上篇中我们介绍了我们所熟知的中缀表达式转为后缀表达式,那么如何通过呢?本篇将会介绍计算机是如何基于后缀表达式计算的?

2023-09-10 11:45:08 221

原创 C++数据结构X篇_10_C++栈的应用-中缀转后缀

中缀表达式就是我们平时运算表达式,其特点是运算符总是处于两个运算对象之间。但是该表达式计算机处理起来较为麻烦,会将其转写成后缀表达式,后缀表达式也叫逆波兰表达式,后缀表达式的特点是每个运算符都置于两个运算对象之后。。

2023-09-10 10:52:30 150

原创 C++设计模式_03_模板方法Template Method

定义一个操作中的算法的骨架(对应第二种方法的run函数) (稳定),而将一些步骤延迟(延迟一般代表定义一个虚函数,让子类去实现虚函数,也就是支持子类来变化)(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构,即可重定义(override 重写)该算法的某些特定步骤。—《设计模式》GoF可以参考方法二中的代码进行映射理解的。

2023-09-08 22:11:31 875

C++新特性18-智能指针的简易实现及添加模板思维导图

博文:C++新特性18_智能指针的简易实现及添加模板配套思维导图

2024-02-06

Modbus通信从入门到精通中使用到的测试软件

此为博文Modbus通信从入门到精通中使用到的测试软件,除了虚拟串口的软件,其他基本上都有了

2023-07-08

03-1-Qt 5.9 C++开发指南-Qt核心特点源码

03-1_Qt 5.9 C++开发指南_Qt核心特点源码,记得删除.pro.user文件

2023-07-02

02-0-Qt 5.9 C++开发指南-GUI应用程序设计基础源码

配套博文《02-0_Qt 5.9 C++开发指南_GUI应用程序设计基础(创建UI设计所使用到的文件及整体的运行机制;UI设计实例;可视化UI设计、代码化UI设计、混合式UI设计(QMainwindow))》代码,有需要的可以进下载

2023-06-26

博文C++数据结构X篇-04-单向链表框架搭建、实现和测试(链表的定义,常用操作的实现等)的配套资源

博文C++数据结构X篇_04_单向链表框架搭建、实现和测试(链表的定义,常用操作的实现等)的配套资源

2022-12-02

博文C++数据结构X篇-03-线性表的顺序存储和动态数组案例(基本概念;操作要点;顺序存储算法;动态数组案例实现)配套资源

C++动态数组的实现源代码

2022-11-27

Qt翻金币项目XMind思维导图

Qt翻金币项目XMind思维导图,配套介绍见博文:https://blog.csdn.net/Dasis/article/details/127350498

2022-11-17

Qt翻金币项目所有源代码

本篇将会根据前面讲解的关于Qt的相关内容进行一个实战项目:Qt翻金币项目所有源代码,希望对大家有用,具体的讲解见我写的博文

2022-11-16

Qt动态链接库demo

Qt动态链接库demo

2022-01-20

PLuginSelfTreeTest源代码

PLuginSelfTreeTest源代码

2022-01-19

Piotr's Computer Vision Matlab Toolbox.zip

Piotr's Computer Vision Matlab Toolbox国外网站下载太慢了,官网下载了供大家使用

2020-04-21

6ES72111AE400XB0.dxf

S7-1200 PLC 6ES72111AE400XB0 CAD 图纸,可以用来绘制接线图相关,已经验证过可用

2019-09-17

空空如也

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

TA关注的人

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