自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 桥接模式

桥接模式简单实现与实例 UML类图: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。 桥接模式角色:(这个是不好理解的,因此还是举例的好) ●Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接

2016-04-13 10:45:53 810

原创 命令模式

命令模式简单实现 UML类图: 命令模式(Command Pattern):将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。 ● Command(抽象命令类):抽象命令类一般是一个抽象类或接口,在其中声明

2016-04-12 23:31:39 463

原创 观察者模式

观察者模式简单实现 UML类图: 观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模...

2016-04-12 22:59:26 473

原创 迭代器模式

迭代器模式简单实现 UML类图: 迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 ● Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的

2016-04-12 22:23:51 408

原创 职责链模式

职责链模式简单实现 UML类图: 职责链模式(Chain of Responsibility  Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。 ● Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不

2016-04-12 22:12:14 761 1

原创 中介者模式

中介者模式简单实现 UML类图: 中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。 中介者模式角色: ● Mediator(抽象中介者):它定义一个接口,该接口用于与各同事对象之间进行

2016-04-12 22:08:35 486

原创 装饰者模式

装饰者模式简单实现 UML类图: 装饰者模式角色: ● Component(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。 ● ConcreteComponent(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方

2016-04-07 21:12:59 863

原创 数组定和元素求解探究

数组定和元素求解几种简单实现 #include #include #include #include #include #include using namespace std; //在数组中寻找两个元素 其和与sum相等 bool FindTwoElementOfSum(const int* p, int len, int sum) { assert(nullptr!=p); assert

2016-04-07 19:27:08 261

原创 数组组合的递归与非递归实现

数组组合的递归与非递归实现 #include #include #include #include #include #include #include #include using namespace std; #define MAX_SIZE 1000 template void Display(const vector& vec) { copy(vec.begin(), vec.end

2016-04-07 19:02:15 659

原创 非递归全排列实现

非递归全排列实现 #include #include #include #include #include #include #include #include using namespace std; const int MAX_SIZE = 1000; /* 寻找下一个排列 假设 某个序列为 d1 d2 d3 ... dn 那么在dn前找第一个 比dn小的元素 那么序列被分为两段 假设为d

2016-04-07 18:29:21 407

原创 抽象工厂模式

抽象工厂模式简单实现 UML类图:     (以下为借鉴) 抽象工厂模式角色: ● AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。 ● ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。 ● Abstr

2016-04-07 12:52:34 597 3

原创 外观模式

外观模式简单实现 UML类图: (以下为摘抄部分)  模式优点        外观模式的主要优点如下:        (1) 它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。        (2) 它实现了子系统与客户端之间的松耦合关系,这使得子系统

2016-04-05 19:02:42 432

原创 C++ 四种类型转换

C++ 四种类型转换 #include #include #include using namespace std; /* static_cast: 用法:static_cast ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的

2016-04-05 10:44:26 312

原创 策略模式

策略模式实现 UML类图 策略模式角色: Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实现委托给具体的Strategy类来实现(ConcreteStratege

2016-04-05 08:44:56 754

原创 代理模式

代理模式简单实现 UML类图: (以下为摘抄部分) 模式优点        代理模式的共同优点如下:        (1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。        (2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。        此外,不同类型的代理模

2016-04-05 08:34:37 307

原创 适配器模式

适配器模式 UML类图   1、接口继承与实现继承 在Adapter模式的两种模式中,有一个很重要的概念就是接口继承和实现继承的区别和联系。接口继承和实现继承是面向对象领域的两个重要的概念,接口继承指的是通过继承,子类获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现(并不统共接口)。在C++中的public继承既是接口继承又是实现继承,因为子类在继承了父

2016-04-03 14:19:55 501

原创 模板方法模式

模板方法模式 UML类图 使用场景: 类中可变与不可变得行为混合在一起,将类中重复的行为搬至基类,细节部分在子类中实现,去除类中的重复。 优缺点: Template模式是很简单模式,但是也应用很广的模式。如上面的分析和实现中阐明的Template是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。 Templ

2016-04-03 14:04:11 440

原创 寻找第n个数 与前n个数的几种方法

寻找第n个数 与前n个数的几种方法 #include #include #include #include #include #include #include #include #include using namespace std; //平均情况 O(n) //前nth-1个元素是无序的 可以调快排 int NthElement(int* p,int left, int right, in

2016-04-02 20:06:49 524

原创 建造者模式

建造者模式 UML类图: 1.主要优点       建造者模式的主要优点如下: (1) 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。 (2) 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不

2016-04-02 15:43:19 311

原创 原型模式

浅谈原型模式 UML类图 1.主要优点       原型模式的主要优点如下: (1) 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率。 (2) 扩展性较好,由于在原型模式中提供了抽象原型类,在客户端可以针对抽象原型类进行编程,而将具体原型类写在配置文件中,增加或减少产品类对原有系统都没有任何影响。

2016-04-02 14:17:24 371

原创 KMP算法

KMP算法实现 /* 函数:KMP算法 时间:2016.04.01 作者:MrZhang */ #include #include #include #include #include using namespace std; //next数组含义 /* next[i]:表示从数组[0,i],既是前缀 又是真后缀的最大长度 通俗解释就是又是前缀 又是后缀 并且不等于自己 比如: a b c

2016-04-02 09:53:40 231

转载 Manacher 算法实现

Manachaer算法详解 1.Manacher算法原理 下面介绍Manacher算法的原理与步骤。 首先,Manacher算法提供了一种巧妙地办法,将长度为奇数的回文串和长度为偶数的回文串一起考虑,具体做法是,在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,分隔符的要求是不在原串中出现,一般情况下可以用#号。下面举一个例子:

2016-04-01 16:20:03 333

原创 组合模式

浅谈组合模式       在组合模式结构图中包含如下几个角色:       ● Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等。       ● Leaf(叶子构件):它在组合结构中表示叶子节点对

2016-04-01 14:58:29 321

原创 string(char*)与基本数据类型的转换

string(char*)与基本数据类型的转换 #include #include #include using namespace std; #include #include #define ISDIGIT(ch) ((ch)>='0'||'9'<=(ch)) int StringToInt(const string& Str); template string TransString(c

2016-03-31 21:24:16 551

原创 工厂方法模式

浅谈工厂方法模式 简单工厂模式 最大优点是工厂类中包含了必要的逻辑判断,根据客户端条件动态选择 实例化相关的类,对于客户端来说,去除了与具体产品的依赖。 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 工厂方法模式使一个类的实例化延迟到子类中。 优点:当需要添加产品类时只进行扩展,不进行扩展。(符合开闭原则) 缺点:客户端需要判断实例化哪一个工厂,并且有几个产品类

2016-03-31 19:20:51 241

原创 简单工厂模式

简单工厂模式 问题引出: 在面向对象系统设计中经常可以遇到以下的两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码。这

2016-03-31 18:50:39 299

原创 单例模式

浅谈单例模式 #pragma once #include #include std::mutex g_lock;//C++11 提供的线程锁 /* 单例模式,可以说设计模式中最常应用的一种模式了, 据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人, 可能不会想到要去应用单例模式,面对单例模式适用的情况, 可能会优先考虑使用全局或者静态变量的方式,这样比较简单, 也是没学过设计模式的人所能

2016-03-31 11:43:51 401

原创 CString string char TCHAR 之间的转换

CString string char TCHAR 之间的转换 最近在VS2015 下写MFC的程序,发现VS里面UNICODE编码下 字符串转换很麻烦,于是自己搜索加测试总结了一下。 #ifdef   UNICODE               typedef   wchar_t   TCHAR;    #else               typedef   unsigned  

2016-03-31 10:40:12 1509

原创 排序方法总结(递归与非递归)

个人感觉只要能弄懂上面的排序代码 并能够快速手写。笔试面试都不是问题。界面可能不美观,还请大家耐心!

2016-03-20 19:43:48 261

原创 STL适配器(ostream_itertor与istream_iterator)

ostream_itertor与istream_iterator //配接器 /* 是一种常用设计模式 将一个class的接口转换为另一个class的接口 使原本因接口不兼容的class可以死一起运作 可应用于容器 迭代器 仿函数等 */ /* ostream_iterator istream_iterator */ #include #include//文件流 #include #in

2016-03-20 17:08:23 487

原创 STL 函数对象

STL函数对象使用 //函数对象 /* 函数对象就是一个行为类似函数的对象,为了能够行为类似函数,所以在类中必须自定义 函数调用运算子() 函数指针不够灵活 无法满足STL的抽象性要求 */ /* unary_function STL规定每一个一元函数都必须继它 它内部只模板化了参数与返回值 binary_function 呈现二元函数的两个参数与返回值 用户可以继承它 binder1

2016-03-20 17:03:05 418

原创 STL排序算法

STL排序算法使用 //局部排序 与整体排序算法 /* partical_sort(使用heap_sort) partition(轴值采用三点中值) stable_partition stable_sort nth_element(采用partation的思想) */ /* sort(f,l,Com) 接收随机迭代器 数据量大时采用Quick_sort 分段递归排序 一旦分段的数据量小于某个门槛

2016-03-20 16:56:58 301

原创 STL复杂算法

STL复杂算法浅谈 //复杂算法 #include #include #include #include #include #include using namespace std; #define N_COUNT 6 /* 以下函数 最后都默认使用operator<进行比较 自己也可以提供仿函数 都应用于有序区间 lower_bound(f,l,val); 返回小于val区间的下一个位置 迭代

2016-03-20 16:51:53 230

原创 STL 单纯数据处理函数

STL 单纯数据处理函数 #include #include #include #include #include #include using namespace std; //单纯数据处理算法 /* adjacent_find 寻找相邻满足条件的元素对 返回前一个的迭代器 count 统计某值出现的次数 count_if 统计满足条件的值的个数 max_element min_element

2016-03-20 16:47:05 315

原创 STL常用数值算法

STL常用数值算法 #include #include #include #include #include #include #include using namespace std; //数值算法 /* accumulate 累加或者类乘 partial_sum 局部求和 fill fill_n 填充 初始化时使用方便 equal判断两区间是否相等 for_each 相当于for循环 co

2016-03-20 16:35:50 367

原创 STL双端队列 deque

STL双端队列 deque #include #include #include #include #include using namespace std; /* deque采用一块map(不是STL中的map,是一块连续空间)作为主控, 每个元素都是一个节点(cur fist last node)指向另一段连续较大的空间(成为缓冲区 默认512byte) deque内维持一个map和 来两个

2016-03-20 16:28:27 389

原创 STL qriority使用及原理

STL qriority使用及原理 #include #include //优先队列头文件 #include #include using namespace std; /* 构造函数: 底层容器为vector priority_quene(); priority_quene(f,l);//此时函数对象默认为 less(),即大根堆 priority_quene(f,l,Com);//指定自定

2016-03-17 22:45:03 429

原创 STL heap底层及使用

STL heap底层及使用 #include #include #include #include using namespace std; /* heap的隐式表达法 数组0下标位置 保留则用数组存储完全二叉树时 根节点位于i 则左孩子为2*i 右孩子为2*i+1 不过SGI STL并未使用这一技巧 我个人也不提倡使用这一技巧 因为这会在排序时带来不便 */ /* heap是与vector

2016-03-17 22:43:33 325

原创 STL unordered_map(hash_map)详解

STL unordered_map(hash_map)详解 #include #include #include #include #include #include using namespace std; //底层为hashtable 不允许键值重复 内部元素不会经过排序 //常用函数 /* 构造函数: unordered_map(size_type n,const hasher& hf,c

2016-03-17 22:40:23 2971

原创 STL unordered_set(hahs_set)详解

STL  unordered_set(hahs_set)底层 #include #include #include #include #include #include using namespace std;//被人代码 在VS2015下编写//介绍hashset 与hashmap之前先了解 底层的hashtable//C++11 用unordered_set 与unordered_map 代

2016-03-17 22:36:08 1026

Effevtive c++

这本顺比较有难度 是学习c++的经典书籍 大家可以 多看看

2015-08-15

空空如也

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

TA关注的人

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