自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

几番离愁的博客

no pains no gains

  • 博客(51)
  • 资源 (4)
  • 收藏
  • 关注

原创 c++跨平台串口库(serial)

使用serial就很简单了,在serial::Serial构造函数里就可以设置好串口的参数,一般只需要调用read()或write()函数即可。对于一个已经使用cmake编译的工程,增加serial库只需要增加这两个命令。这里我创建了一个简单的demo工程,只有一个main.cpp。

2023-06-01 18:07:19 2572

原创 CMakeLists.txt模板

cmake模板

2023-02-01 14:58:00 208

原创 matlab导出相机标定数据

matlab导出相机标定数据

2022-06-13 11:51:33 1082

原创 深度图无损压缩——RVL算法

深度图无损压缩——RVL算法RVL算法(Run length encoding and Variable Length encoding)是微软自研的深度图无损压缩算法。论文下载算法流程#mermaid-svg-JHOBBmUeNcmCUuVg .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-JHOBBmU

2021-11-15 15:50:12 3987

原创 error C4996: ‘Halide::Func::realize‘: Call realize() with a vector<int> instead解决办法

error C4996: ‘Halide::Func::realize’: Call realize() with a vector instead解决直接从Halide的Tutorials复制过来的源码运行不了,会出现Call realize() with a vector instead的错误,查看Halide::Func::realize源码可以看到下面几个函数以及被弃用了。解决办法一一种解决办法是使用大括号初始化列表来把参数传入,才会调用vector的重载函数。Buffer<int&

2021-10-19 10:55:36 127

原创 openssl算法 (RSA\MD5\SHA1) 使用demo

CRsa.h#pragma once#include <cassert>#include <string>#include <fstream>#include <iostream>#include <openssl\pem.h>#include <openssl\rsa.h>#include <openssl\bio.h>#pragma comment(lib, "libcrypto.lib") //o

2020-11-17 11:31:15 552 1

转载 redis之HyperLogLog详解(转)

HyperLogLog详解

2020-06-22 11:56:32 153

原创 redis之dict源码解析

dict结构/* 字典词条(键值对) */typedef struct dictEntry { void *key; //该词条的key值 union { void *val; //其他数据类型 uint64_t u64; //uint64_t整型 int64_t s64; //int64_t整型 double d; //double浮点型 } v; struct dictEnt

2020-06-20 18:25:31 260

原创 tinyhttpd主要源码解析

accept_request函数预备知识  accept_request的作用是用来接受http请求消息。要看懂该函数,首先要先了解http请求消息结构,结构如下图:  请求消息结构分为四部分:请求行(request line)、请求头部(header)、空行、请求数据(body)  常见请求方法:get、post、put、delete对应的操作是查、改、增、删,但tinyhttp是轻量级http服务器只实现了最常见的请求方法get和put  get实例如下:GET /562f25980001

2020-06-05 23:24:24 372

原创 设计模式 - 访问器(Visitor)

动机  在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。  如何在不更改类层次结构的前提下,在运行时根据需 要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题?模式定义  表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。结构类图案例分析未使用设计模式class Element{pub

2020-05-27 22:52:52 180

原创 设计模式 - 命令模式(Command)

动机  模式定义  结构类图案例分析未使用设计模式使用要点总结以上内容来源于李建忠老师的c++设计模式

2020-05-27 20:14:18 181

原创 设计模式 - 职责链(Chain of Resposibility)

动机  在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。  如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。模式定义  使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。结构类图案例分析enum class RequestType{ REQ_HAN

2020-05-27 17:01:41 170

原创 设计模式 - 迭代器(Iterator)

动机  在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。  使用面向对象技术将这种遍历机制抽象为"迭代器对象” 为“应对变化中的集合对象”提供了一种优雅的方式。模式定义  提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。结构类图案例分析template<typename T>

2020-05-27 16:29:27 155

原创 设计模式 - 组合模式(Composite)

动机  在软件在某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。  如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?模式定义  将对象组合成树形结构以表示" 部分 一 整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性(稳定)。结构类图案例分析class Com

2020-05-27 15:47:28 223

原创 设计模式 - 备忘录(Memento)

动机  在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。  如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。模式定义  在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。结构类图案例分析class Memento{ string state; //

2020-05-27 14:37:25 173

原创 设计模式 - 状态模式(State)

动机  在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。  如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?模式定义  允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。结构类图案例分析  某个网络任务类设计,有三种网络模式,每个接口对应某种模式所做的任务都不一样,且做完之后需要切换状态未使用设计模式enum NetworkSt

2020-05-27 14:16:40 173

原创 设计模式 - 中介者(Mediator)

动机  在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系 ,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。  在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。模式定义  用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互引|用(编译时依赖→运行时依赖) ,从而使其耦合松散(管理变化),而且可以独立地.改变它们之间的交互。结构类图案例

2020-05-26 22:58:56 192

原创 设计模式 - 适配器(Adapter)

动机  在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”,放在新的环境中使用,但是新环境要求的接口是这些现存对象所不满足的。  如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?模式定义  将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。结构类图案例分析//目标接口(新接口)class ITarget{public: virtual void pro

2020-05-26 22:16:55 140

原创 设计模式 - 代理模式(Proxy)

动机  在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等 ),直接访问会给使用者、或者系统结构带来很多麻烦。  如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。模式定义  为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。结构类图案例分析未使用设计模式class ISubject{public: virtual void process();}

2020-05-26 20:54:43 128

原创 设计模式 - 构建器(Builder)

动机  在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。  如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?模式定义  将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。结构类图案例分析未使用构建器class House{

2020-05-26 16:21:21 161

原创 设计模式 - 原型模式(Prototype)

动机  在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。  如何应对这种变化?如何向“客户程序(使 用这些对象的程序) "隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?模式定义  使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。结构类图案例分析未使用原型模式前class MainForm : public Form{public: voi

2020-05-26 15:30:24 181

原创 设计模式 - 抽象工厂(Abstract Factory)

动机  在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。  如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?模式定义  提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。结构类图案例分析  以软件中使用数据库类为例,数据库组成可分为三部分Connection、Command、DataReader,市面上数据库

2020-05-25 22:28:00 175

原创 设计模式 - 工厂模式(Factory Method)

动机  在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。  如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?模式定义  定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类结构类图案例分析  以下为文件分割器的类设计为例未使用工厂模式前class MainForm : public Form{public:

2020-05-25 16:17:06 128

原创 设计模式 - 桥模式(bridge)

动机  由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。  如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?模式定义  将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。结构类图案例分析未使用桥模式前class Messager{public: virtual void Login(string username, string password)=0;

2020-05-25 15:22:42 240

原创 设计模式 - 装饰者模式(Decorator)

动机在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?模式定义  动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 &am

2020-05-24 22:14:07 157

原创 设计模式 - 观察者模式(Observer)

动机  在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。  使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义  定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。结构体类图案例分析未使用观察者模式前in

2020-05-21 22:11:50 351 1

原创 设计模式 - 策略模式(Strategy)

动机  在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。  如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?模式定义  定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。结构类图案例分析未使用策略模式前enum TaxBase { CN_Tax, US_Ta

2020-05-21 15:54:58 152

原创 设计模式 - 模板模式(Template Method)

模式定义解决问题结构类图案例分析注意要点

2020-05-21 13:50:15 139

原创 面向对象的23种设计模式

什么是设计模式每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。八大设计原则(1)依赖倒置原则高层模块不应该依赖于底层模块,二者都应该依赖于抽象抽象不应该依赖于实现细节,实现细节不应该依赖抽象(2)开放封闭原则对扩展开放,对更改封闭类模块应该是可扩展的,但是不可修改(3)单一职责原则一个类应该仅有一个引起它变化的原因变化的方向隐含着类的责任(4)替换原则子类必须能够替换它们的基类继承表达类型抽象(5)接口隔离原则不应该强迫客户程序依

2020-05-20 22:58:35 828

原创 EXPLAIN分析SQL语句

EXPLAIN是什么及其作用  EXPLAIN显示了MySql如何使用索引来处理select语句以及连接表。使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,继而可以帮助选择更好的索引和写出更优化的查询语句。EXPLAIN使用方式EXPLAIN + select的SQL语句  上图显示了EXPLAIN的结果集,接下来我们一步步了解每个字段代表的含义。EXPLAIN结果集分析id  id表示读取顺序。id越大,越先被读取;相同id时,由上至

2020-05-19 13:17:37 640

转载 C++11智能指针

智能指针详解https://blog.csdn.net/flowing_wind/article/details/81301001weak_ptr的作用https://www.cnblogs.com/wuyepeng/p/9741241.html为了解决两个share_ptr互相引用造成的死锁

2020-05-16 21:27:01 81

原创 C/C++分区详解

预备知识  在区分一个程序的堆栈、bss、text段、RO、RW、ZI等概念时,首先区分一下程序进程和程序文件,然后了解一下哈弗结构和冯诺依曼结构。程序进程就是程序运行时的程序,程序文件是编译后生成的可执行文件,比如.bin文件等。哈佛结构和冯诺依曼结构的主要区别就是处理器能不能实现取指令和取数据的并发进行。嵌入式芯片中主要是哈佛结构,PC机上是冯诺依曼结构。哈佛结构经典的哈佛结构:程序存储器和数据存储器是各自独立的存储器。处理器应该有两套总线,一套是程序存储器的数据和地址总线,一套是数据存储器的数

2020-05-14 16:43:33 1072

原创 linux终端快捷键及各目录含义

快捷键单词功能Alt + F front光标向后移动一个单词Alt + B back光标向前移动一个单词Ctrl + Afront移动到当前行的开头Ctrl + Efront移动到当前行的结尾Esc + Bfront移动到当前单词的开头Esc + Ffront移动到当前单词的结尾Ctrl + Ffront光标向后移动一个字符,相当与<-Ctrl + Bback光标向前移动一个字符,相当与->...

2020-05-11 16:16:35 256

原创 完全二叉堆

1 定义  堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。由此可见,堆是树与向量的结合体,其逻辑结构等同于完全二叉树,而物理结构与向量相同。  二叉堆具有结构性和堆序性,所谓结构性即其逻辑结构等同于完全二叉树,而堆序性则是堆中任一节点都与其父节点有固定的大小关系。  二叉堆可分为大顶堆和小顶堆,大顶堆的父结点的键值总是大于或等于任何一...

2020-04-14 22:53:06 399

原创 详解动态规划

什么是动态规划动态规划是求解决策过程最优化的数学方法。利用各个阶段之间的关系,逐个求解,最终求得全局最优解,需要确认原问题与子问题、动态规划状态、边界状态、边界状态结值、状态转移方程。适用环境能采用动态规划求解的问题的一般要具有3个性质:最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。无后效性:即某阶段状态一旦确定,就不受这个状态以...

2020-04-14 14:18:29 383

原创 常见散列函数及冲突解决方案

哈希哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。哈希算法哈希表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。...

2020-04-10 21:35:40 3240

原创 平衡二叉搜索树 - 红黑树

1 意义        其他平衡二叉树,如AVL、B树等,经过某次动态操作,可能导致全树整体拓扑结构的大幅度变化。在某些场合不适用,如保存快照时,那能不能保证每次动态操作后,仅改变局部拓扑结构,对整体没有太大影响呢?        答案...

2020-04-05 22:44:21 203

原创 平衡二叉搜索树 - B树

1 B树1.1 意义        由于内外存的访问速度差距过大,相差5至6个数量级,在衡量算法的性能时,基本可以忽略对内存的访问,转而更多地关注对外存的访问次数。那么如何能有效地减少外存操作呢?        为此,需要利用磁盘之类...

2020-04-03 21:13:34 376

原创 平衡二叉搜索树 - AVL树

1 定义二叉搜索树中各节点的平衡因子不大于1,则该树为AVL树1.1 平衡因子任一节点v的平衡因子定义为其左、右子树的高度差,即平衡因子=左子树高度 - 右子树高度1.2 平衡性可以证明在渐进意义而言,AVL树的高度为O(logn),因此AVL树符合适当平衡。2 失衡策略AVL树中的查找、插入和删除所采取的策略与普通二叉搜索树一致,但经过动态操作后节点高度可能发生变化,以致于AVL树...

2020-04-02 16:01:08 189

原创 二叉搜索树(BST)

1 二叉搜索树(BST)1.1 定义二叉搜索树是指二叉树中各节点(或对应的关键码)的值支持大小比较,且左子树上所有结点的值均小于它的根结点的值,右子树上所有结点的值均大于它的根结点的值的树。1.2 顺序性二叉搜索树中序遍历可转换成线性序列,该序列的节点严格按照其大小次序排列,可得结论:二叉搜索树当且仅当其中中序遍历单调非降1.3 查找1.3-1 算法二叉搜索树的查找算法,采用了...

2020-04-02 10:16:50 655

c++跨平台串口库serial

基于https://github.com/wjwwood/serial/tree/boostless项目修改,删除不必要文件,无需catkin只要cmake即可使用

2023-06-01

sqlite可视化控件,仅支持查询(可模糊查询、分页),不可增删

包含文件: DBWigdet.h DBWigdet.cpp DBWigdet.ui

2023-02-22

UniversalRead.h

raw数据读取代码,支持大小端转换、有效位移动、旋转,模板类实现可读任何数据

2021-12-22

c/c++ 盒式滤波器(BoxFilter)

使用c++实现盒式滤波器,使用模板函数实现,方便处理任何数据,算法速度优化较好

2021-12-21

64位libpng + zlib + libjpeg

64位libpng + zlib + libjpeg编译好的库,学习Halide必备!

2021-10-19

opencv3.4.10.zip

opencv3.4.10开发文档,doxywizard转化好的,浏览器打开即可

2021-02-07

空空如也

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

TA关注的人

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