自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

saizo123的博客

C/CPP以及Windows/Linux,openGL和DirectX图形学GPU(CUDA/OPENCL)编程,openCV机器视觉、图形处理等

  • 博客(38)
  • 资源 (3)
  • 收藏
  • 关注

转载 二插排序树

二分查找只适用于静态查找,不适合改变查找表。当然他们的时间复杂度都是logn 头文件#ifndef _BSTREE_H_ #define _BSTREE_H_ typedef void BSTree;//数据封装 typedef void BSKey; /********************** 结点指针域定义 **********************/ typedef

2017-08-22 09:11:54 424

转载 插值法查找

#include <stdio.h> #include <time.h> #define SIZE 20 void print_array(int a[], int len) { int i = 0; for (i = 0; i < len; i++){ printf("%d,", a[i]); } printf("

2017-08-22 09:04:46 431

原创 设计模式概括

创建型模式 单例模式Singleton 工厂模式Factory 抽象工厂模式AbstractFactory 创建者模式Builder 原型模式Prototype 结构性模式 代理模式Proxy 装饰模式Decorator 适配器模式Adapter 组合模式Composite 桥接模式Bridge 外观模式Facade 享元模式Flyweight 行为型模式 模板模式T

2017-08-21 20:42:41 277

原创 迭代器模式

iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。    在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。 由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法   –弊端是容器类承担了太多功

2017-08-21 20:30:02 291

原创 解释器模式与状态模式

解释器模式解释器模式是行为型模式之一,描述了如何为简单的语言定义一套语法,如何在该语言中表示一个句子,以及如何解释这些句子,然后执行相应的动作和行为! 角色及职责 Context 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。 AbstractExpression 解释器抽象类。 ConcreteExpression 解释器具体实现类。 案例#inc

2017-08-21 20:26:29 260

原创 备忘录模式与访问者模式

备忘录模式Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象(原生对象)的内部状态到备忘录,并在需要的时候通过caretaker(保存了备忘录)提取备忘录的内容(undo/rollback)恢复原生对象以前的状态。 角色及职责 Originator(原生者) 需要被保存状态以便恢复的那个对象。 Memento(备忘录) 该对象由Originator创建,主要用

2017-08-21 20:14:30 314

原创 中介者模式与观察者模式

中介者模式Mediator(中介者)模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。   用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。 角色和职责 Mediator抽象中介者

2017-08-21 19:57:20 4680

原创 责任链模式与策略模式

责任链模式Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。 例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。   首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完

2017-08-21 19:43:25 11429

原创 命令模式

Command模式也叫命令模式 ,是行为型设计模式的一种。Command类封装了对目标对象的调用行为以及调用参数。   在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。   但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。   整个调用过程比较繁杂,或者存在多处这

2017-08-21 19:30:49 207

原创 模板模式

Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法(模板方法)中的某些必要的处理委让给抽象方法(模板类父类中的纯虚函数),通过子类对抽象方法的不同实现,改变整个算法的行为。 也就是说,通过子类重写父类虚函数,在保证总体大局,总体步骤不变的情况下,每一个小步骤的具体算法行为可以改变,最终实现接口不变。 角色和职责 案例#include <iostr

2017-08-21 19:21:16 230

原创 享元模式

Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。说白了,就是共享内存,共享对象! 角色和职责 抽象享元角色: 所有具体享元类的父类,规定一些需要实现的公共接口。 具体享元角色: 抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。 享元工厂角色: 负责创建和管理享元角色。 使用场景: 是以共享的方式,高效的支持大量

2017-08-21 19:18:39 196

原创 外观模式

Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。 角色和职责 Façade 为调用方, 定义简单的调用接口。 Clients(没有画出) 调用者。通过Facade接口调用提供某功能的内部类群。 Subsystem 功能提供

2017-08-21 19:09:46 171

原创 protobuf3.4在VS2015环境下编译

1、首先必须保证已下载安装VS2015、Git、CMake。 2、从Github中下载protobuf的压缩包,然后选择一个目录进行解压。 3、然后在解压目录的同级目录新建文件夹install(用于存放头文件/库/二进制文件)。 4、在(解压目录)\cmake目录下创建build目录,进入build目录,创建release、debug、solution三个目录。 5、打开开始面板,点击VS2

2017-08-20 11:38:57 1481

原创 桥接模式

Bridge 模式又叫做桥接模式,是结构型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。   一般用来解决多对多的问题!两个集合中的元素可以自由组合,每个集合分别代表抽象和实现!

2017-08-20 10:39:57 196

原创 组合模式

组合模式,是(构造型)结构型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。 角色及职责 Component (树形结构的节点抽象) 为所有的对象定义统一的接口(公共属性,行为等的定义) 提供管理子节点对象的接口 [可选]提供管理父节点对象的接口 Leaf (树形结构的叶节点) Component的实现子类–普通文件 Composite(树

2017-08-20 10:33:03 209

原创 适配器模式

是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。 角色和职责 Target: 目标类,也就是客户端希望使用的类,里面有希望得到的接口–对应案例中的18V。 Adapter 适配器,将实际接口转换为希望使用的接口,适配器继承自目标类。–对应案例中的Adapter。 Adaptee 待适配的类,实际提供的类,通过适配器的功能,客户端可以使用其提供的实际类

2017-08-20 10:25:43 164

原创 装饰模式

装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。   装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 角色及职责 component 抽象产品类。是所有具体产品和装饰者的基类,客户端就是面向抽象产品类进行编程,他

2017-08-20 10:18:25 224

原创 代理模式

代理模式,是结构型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。   所谓代理,是指具有与代理元(被代理的对象)具有相同接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。 角色及职责 subject(抽象主题角色): 真实主题与代理主题的共同接口。 RealSubject(真实主题角色

2017-08-20 10:11:38 206

原创 原型模式

Prototype(原型)模式是一种对象创建型模式,它采取复制原型对象的方法来创建新的对象实例。使用Prototype模式创建的实例,具有与原型一样的数据。   1. 由原型对象(旧对象)自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。 2. 目标对象是原型对象的一个克隆。 3. 根据对象克隆深度层次的不同,有浅度克隆与深度克隆。 角色及职责 原型模式主要面对的问题

2017-08-20 10:04:58 178

原创 创建者模式

建造者模式也叫生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。   对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:关注对象各部分的创建过程:不同的工厂(这里指builder(创建者)/生成器)对产品属性

2017-08-20 09:54:24 431

原创 抽象工厂模式

抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。 对于工厂模式:要么生产香蕉、要么生产苹果、要么生产西红柿;但是不能同时生产多个产品。 抽象工厂:能同时生产一个产品族(多个产品)。===》抽象工厂存在原因 重要区别: 工厂模式只能生产一个产品。(要么香蕉、要么苹果)

2017-08-20 09:46:24 215

原创 工厂模式

简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 有一个工厂类,专门生产别的类的实例,这些能被他生产的类具有相同的父类! 核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。 注意:简单工厂模式不属于23种设计模式之一 角色及职责 工厂(Creato

2017-08-20 09:37:21 203

原创 STL之算法

adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。否则返回past-the-end。vector<int> vecInt;vecInt.push_back(1);vecInt.push_back(2);vecInt.push_back(2);vecInt.push_back(4);vecInt.push_

2017-08-19 10:35:52 394

原创 STL之Map和multimap容器

map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。 map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。 map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。 map可以直接存取key所对应的value,支持[]操作符,如map[ke

2017-08-19 10:18:30 383

原创 STL之Set和multiset容器

set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。 set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。 set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。 multiset与set的区别:set支持唯一键值,每个元素值只能出现一次;而multise

2017-08-19 10:05:29 268

原创 STL之优先级队列priority_queue

最大值优先级队列、最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用 示例代码int main(void){ priority_queue<int> p1; priority_queue<int, vector<int>, less<int>> p2; priority_queue<int, vector<int>, gr

2017-08-19 09:55:21 248

原创 STL之List容器

list是一个双向链表容器,可高效地进行插入删除元素。 list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。It++(ok) it+5(err) #include <list>对象的默认构造 list采用采用模板类实现,对象的默认构造形式:list lstT; 如:list<int> lstInt; //定义一个存放int的list容器。list<fl

2017-08-19 09:48:28 205

原创 STL之Queue

queue是队列容器,是一种“先进先出”的容器。 queue是简单地装饰deque容器而成为另外的一种容器。 #include <queue>对象的默认构造 queue采用模板类实现,queue对象的默认构造形式:queue queT; 如:queue<int> queInt; //一个存放int的queue容器。queue<float> queFloat; //

2017-08-19 09:38:15 245

原创 STL之Stack

stack是堆栈容器,是一种“先进后出”的容器。 stack是简单地装饰deque容器而成为另外的一种容器。 #include <stack>stack对象的默认构造 stack采用模板类实现, stack对象的默认构造形式: stack stkT;stack <int> stkInt; //一个存放int的stack容器。stack <float> stkFloat;

2017-08-19 09:32:08 232

原创 STL之Deque容器

deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。 deque在接口上和vector非常相似,在许多操作的地方可以直接替换。 deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。 deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费

2017-08-19 09:19:03 345

原创 STL之Vector

vector是将元素置于一个动态数组中加以管理的容器。可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法,还支持迭代器方式存取)。 vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时。 对象初始化 对象的默认构造 vector采用模板类实现,vector对象的默认构造形式 vector<T> vecT;vector<int> vecInt;

2017-08-19 08:59:05 389

原创 STL之String

string和char*的区别 1、string是一个类, char*是一个指向字符的指针。 string封装了char*,管理这个字符串,是一个char*型的容器。也就是说string是一个容器,里面元素的数据类型是char*。 2、string不用考虑内存释放和越界。 string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和

2017-08-19 08:29:05 204

原创 static_cast、reinsterpret_cast、dynamic_cast、const_cast

static_cast用法和reinterpret_cast用法void main(){ double dPi = 3.1415926; //1静态的类型转换: 在编译的时 进行基本类型的转换 能替代c风格的类型转换 可以进行一部分检查 int num1 = static_cast<int> (dPi); //c++的新式的类型转换运算符 int num2 =

2017-08-13 19:10:04 490

转载 动态库的设计与实现

编写DllMain函数 DllMain函数是DLL模块的默认入口点。当Windows加载 DLL模块时调用这一函数。系统首先调用全局对象的构造函数,然后调用全局函数DLLMain。DLLMain函数不仅在将DLL链接加载到进程时被调 用,在DLL模块与进程分离时(以及其它时候)也被调用。下面是一个框架DLLMain函数的例子。HINSTANCE g_hInstance; extern “C” i

2017-08-13 15:37:28 1178

原创 链表

结构体里面套一个自己类型的结构体元素是不行的,但是可以套指向自己类型的结构体指针; 结构体不能嵌套定义(确定不了数据类型的内存大小,分配不了内存) 函数的嵌套调用和数据类型的嵌套定义是两个不同的概念。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>typedef s

2017-08-13 14:22:11 180

原创 结构体高级

结构体指针的输入输出模型 简单的输出模型#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>typedef struct Teacher{ char name[64]; int age ; int id;}Teacher;void pri

2017-08-13 13:49:18 253

转载 二级指针三种内存模型

二级指针做输出模型#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>//指针做输出:被调用函数分配内存 -----OK//指针做输入:主调用函数 分配内存//求文件中的两段话的长度int getMem(char **myp1, int *mylen1, ch

2017-08-13 13:02:18 1660

原创 字符串操作与一级指针内存模型

字符串copy函数推演过程 最次的字符串拷贝代码#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ char *src = "abcd"; char buf[64]; int i = 0; for (i = 0

2017-08-13 10:57:58 306

Effective STL

Effective STL

2017-04-01

Effective及Exceptional系列

最全C++权威编程经典

2017-04-01

C++标准库第二版及源码

高清资源

2017-04-01

空空如也

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

TA关注的人

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