C/C++
文章平均质量分 79
MrZhanglver
这个作者很懒,什么都没留下…
展开
-
排序方法总结(递归与非递归)
个人感觉只要能弄懂上面的排序代码 并能够快速手写。笔试面试都不是问题。界面可能不美观,还请大家耐心!原创 2016-03-20 19:43:48 · 269 阅读 · 0 评论 -
中介者模式
中介者模式简单实现UML类图:中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。中介者模式角色:● Mediator(抽象中介者):它定义一个接口,该接口用于与各同事对象之间进行原创 2016-04-12 22:08:35 · 493 阅读 · 0 评论 -
适配器模式
适配器模式UML类图 1、接口继承与实现继承在Adapter模式的两种模式中,有一个很重要的概念就是接口继承和实现继承的区别和联系。接口继承和实现继承是面向对象领域的两个重要的概念,接口继承指的是通过继承,子类获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现(并不统共接口)。在C++中的public继承既是接口继承又是实现继承,因为子类在继承了父原创 2016-04-03 14:19:55 · 505 阅读 · 0 评论 -
装饰者模式
装饰者模式简单实现UML类图:装饰者模式角色:● Component(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。● ConcreteComponent(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方原创 2016-04-07 21:12:59 · 867 阅读 · 0 评论 -
外观模式
外观模式简单实现UML类图:(以下为摘抄部分) 模式优点 外观模式的主要优点如下: (1) 它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。 (2) 它实现了子系统与客户端之间的松耦合关系,这使得子系统原创 2016-04-05 19:02:42 · 438 阅读 · 0 评论 -
策略模式
策略模式实现UML类图策略模式角色:Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实现委托给具体的Strategy类来实现(ConcreteStratege原创 2016-04-05 08:44:56 · 763 阅读 · 0 评论 -
模板方法模式
模板方法模式UML类图使用场景:类中可变与不可变得行为混合在一起,将类中重复的行为搬至基类,细节部分在子类中实现,去除类中的重复。优缺点:Template模式是很简单模式,但是也应用很广的模式。如上面的分析和实现中阐明的Template是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。Templ原创 2016-04-03 14:04:11 · 446 阅读 · 0 评论 -
代理模式
代理模式简单实现UML类图:(以下为摘抄部分)模式优点 代理模式的共同优点如下: (1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。 (2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。 此外,不同类型的代理模原创 2016-04-05 08:34:37 · 310 阅读 · 0 评论 -
简单工厂模式
简单工厂模式问题引出:在面向对象系统设计中经常可以遇到以下的两类问题:1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码。这原创 2016-03-31 18:50:39 · 303 阅读 · 0 评论 -
建造者模式
建造者模式UML类图:1.主要优点 建造者模式的主要优点如下:(1) 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。(2) 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不原创 2016-04-02 15:43:19 · 316 阅读 · 0 评论 -
原型模式
浅谈原型模式UML类图1.主要优点 原型模式的主要优点如下:(1) 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率。(2) 扩展性较好,由于在原型模式中提供了抽象原型类,在客户端可以针对抽象原型类进行编程,而将具体原型类写在配置文件中,增加或减少产品类对原有系统都没有任何影响。原创 2016-04-02 14:17:24 · 376 阅读 · 0 评论 -
单例模式
浅谈单例模式#pragma once#include#includestd::mutex g_lock;//C++11 提供的线程锁/*单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能原创 2016-03-31 11:43:51 · 405 阅读 · 0 评论 -
职责链模式
职责链模式简单实现UML类图:职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。● Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不原创 2016-04-12 22:12:14 · 773 阅读 · 1 评论 -
迭代器模式
迭代器模式简单实现UML类图:迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。● Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的原创 2016-04-12 22:23:51 · 415 阅读 · 0 评论 -
观察者模式
观察者模式简单实现UML类图:观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模...原创 2016-04-12 22:59:26 · 481 阅读 · 0 评论 -
Manacher 算法实现
Manachaer算法详解1.Manacher算法原理下面介绍Manacher算法的原理与步骤。首先,Manacher算法提供了一种巧妙地办法,将长度为奇数的回文串和长度为偶数的回文串一起考虑,具体做法是,在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,分隔符的要求是不在原串中出现,一般情况下可以用#号。下面举一个例子:转载 2016-04-01 16:20:03 · 337 阅读 · 0 评论 -
寻找第n个数 与前n个数的几种方法
寻找第n个数 与前n个数的几种方法#include#include#include#include#include#include#include#include#includeusing namespace std;//平均情况 O(n)//前nth-1个元素是无序的 可以调快排int NthElement(int* p,int left, int right, in原创 2016-04-02 20:06:49 · 532 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式简单实现UML类图: (以下为借鉴)抽象工厂模式角色:● AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。● ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。● Abstr原创 2016-04-07 12:52:34 · 604 阅读 · 3 评论 -
C++ 四种类型转换
C++ 四种类型转换#include#include#includeusing namespace std;/*static_cast:用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的原创 2016-04-05 10:44:26 · 314 阅读 · 0 评论 -
数组组合的递归与非递归实现
数组组合的递归与非递归实现#include#include#include#include#include#include#include#includeusing namespace std;#define MAX_SIZE 1000templatevoid Display(const vector& vec){ copy(vec.begin(), vec.end原创 2016-04-07 19:02:15 · 664 阅读 · 0 评论 -
数据结构之单链表
数据结构之单链表单链表操作简单,下边提供逆序与插入排序的代码。templatestruct Node{ T Val; Node* next;};template class LinkList{public: LinkList(); LinkList(const T* a, const int nLen); void InsertHead(const T& Val原创 2016-03-15 10:07:34 · 207 阅读 · 0 评论 -
数据结构之双链表
数据结构双链表双链表的各种操作也很简单,下边提供双链表 归并排序代码(经过本人测试)。归并排序采用迭代的自下向上方法,参考STL中list的sort方法。#pragma once#ifndef _DLINLIST_HEADER_#define _DLINKLIST_HEADER_#includetemplatestruct DNode{ T Val; DNode* prev;原创 2016-03-15 10:11:32 · 312 阅读 · 0 评论 -
数组定和元素求解探究
数组定和元素求解几种简单实现#include#include#include#include#include#includeusing namespace std;//在数组中寻找两个元素 其和与sum相等bool FindTwoElementOfSum(const int* p, int len, int sum){ assert(nullptr!=p); assert原创 2016-04-07 19:27:08 · 265 阅读 · 0 评论 -
桥接模式
桥接模式简单实现与实例UML类图:桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式角色:(这个是不好理解的,因此还是举例的好)●Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接原创 2016-04-13 10:45:53 · 818 阅读 · 0 评论 -
命令模式
命令模式简单实现UML类图:命令模式(Command Pattern):将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。● Command(抽象命令类):抽象命令类一般是一个抽象类或接口,在其中声明原创 2016-04-12 23:31:39 · 467 阅读 · 0 评论 -
组合模式
浅谈组合模式 在组合模式结构图中包含如下几个角色: ● Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等。 ● Leaf(叶子构件):它在组合结构中表示叶子节点对原创 2016-04-01 14:58:29 · 324 阅读 · 0 评论