自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 收藏
  • 关注

转载 STL源码剖析:配接器

启配接器就是适配器STL中的适配器一共三种:迭代器适配器是一种观念上的改变,如将赋值操作变成插入,前进变成后退,等函数适配器STL中最广泛的配接器群体可以实现连续配接配接操作:bind,negate,compose容器适配器stack和queue的底层都...

2019-09-23 19:48:00 243

转载 STL源码剖析:仿函数

仿函数就是函数对象函数对象:重载了operator()的类对象使用起来和普通函数一致,所以称为函数对象或是仿函数STL中对于仿函数的参数进行了特殊处理,定义了两个特殊类,类里面只有类型定义一元函数类,unary_functiontemplate <class Arg, class R...

2019-09-23 19:40:00 285

转载 STL源码剖析:算法

启算法,问题之解法也算法好坏的衡量标准:时间和空间,单位是对数、一次、二次、三次等算法中处理的数据,输入方式都是左闭又开,类型就迭代器, 如:[first, last)STL中提供了很多算法,我们只研究感兴趣的几种copy函数拷贝[first, last)到[result, reslut+(last - first)...

2019-09-23 19:36:00 256

转载 STL源码剖析:关联式容器

AVL树AVL树定义:红黑树是一颗二叉搜索树,特别的是一棵保持高度平衡的二叉搜索树AVL树特点:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1AVL树插入:说明:新增节点的平衡因子是0,新增节点是右节点,父节点平衡因子+1,新增节点是左节点,父节点平衡因子-1插入新增节点后,父节点平衡因子变为0,说...

2019-09-23 19:30:00 251

转载 STL源码剖析:序列式容器

前言容器,置物之所也。就是存放数据的地方。array(数组)、list(串行)、tree(树)、stack(堆栈)、queue(队列)、hash table(杂凑表)、set(集合)、map(映像表)…等等。容器按照存储的方式可以分为:序列式容器和关联式容器序列式容器:容器里面的数据可以进行排序,但是不会自动排序,可以使用算法进行排序...

2019-09-23 19:04:00 206

转载 STL源码剖析:迭代器

准备知识什么是迭代器?迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据迭代器是一种智能指针,最重要的操作符重载就是operator*,operator->迭代器的实现需要知道容器的具体细节,因此每一种容器都对应自己特有的迭代器,但是迭代器的接口是一致的Traits编程技巧目的:提取出容器中存放的数据...

2019-09-23 18:47:00 75

转载 STL源码剖析:配置器

作用:对内存的管理接口:申请和释放内容:几个全局函数一级配置器二级配置器准备知识POD是什么:Plain Old Data简称POD,表示传统的C语言类型;与POD类型对应的是非POD类型,表示C++独有的类型区别:POD类型可以直接新进行批量拷贝,非POD类型需要单个对象逐个拷贝,不能批量拷贝...

2019-09-23 15:20:00 97

转载 Python装饰器

什么是装饰器?在不改变原来代码的基础上,修改代码的逻辑本质就是一个高阶函数语法糖是@分类函数装饰器:定义一个函数当做装饰器类装饰器:定义一个类当做装饰器装饰器可以修饰普通方法,类方法,类...装饰器可以叠加使用函数装饰器装饰器本身不带参数def decorator(func): def _deco...

2019-09-21 14:59:00 65

转载 python元编程(metaclass)

  Python元编程就是使用metaclass技术进行编程,99%的情况下不会使用,了解即可。Python中的类和对象  对于学习Python和使用Python的同学,你是否好奇过Python中的对象究竟是怎么被创建处理的?你是否知道Python的class也是对象?是的,你没看错,class也是object。既然class也是objet,那么class这个object是...

2019-09-21 10:57:00 164

转载 STL源码剖析:序

STL源码包含哪些内容容器:STL的核心适配器:容器都是在一种最底层的基础容器上使用适配器实现空间配置器:提供内存的管理迭代器:由于遍历容器中的数据算法:由于操作容器中的数据,如排序,拷贝,查找...仿函数:算法的实现方式就是使用仿函数后续章节将对没一点单独学习和理解转载于:https://ww...

2019-09-03 16:44:00 133

转载 高效C++:定制new和delete

  内存的申请和释放,C++从语言级别提供了new和delete关键字,因此需要了解和熟悉其中的过程。了解new-handler的行为set_new_handler可以指定一个函数,当申请内存失败时调用,如果调用指定的函数后,内存还是不够,就会循环调用使用set_new_handler指定函数一定要小心了解new和delete的合理替换时机...

2019-09-03 15:32:00 105

转载 高效C++:模板和泛型编程

  模板和泛型编程的关注重点在编译期,所有的行为都在编译期确定,因此其规则和玩法也有自己特殊的一套,和其他模块不通用。了解隐式接口和编译期多态元编程------编译器多态,决定哪个重载函数被调用class的特点:显示接口运行期多态template的特点:隐式接口编译器多态,模板的具现...

2019-09-03 14:27:00 94

转载 高效C++:继承和实现

  如何正确的使用继承和实现是本章说明的重点。确定public继承的关系是is-apublic继承等同于is-a对public继承,所有base的特性,在derived上都适用避免遮掩继承而来的名称Deried中的函数会掩盖base中的函数,不论函数是成员函数、虚函数亦或是纯虚函数(不同作用域的函数,名称相同也不构成重载)...

2019-09-03 14:09:00 324

转载 高效C++:实现

本章主要是解决如下问题:类的声明和定义在什么时候提出类与类之间的耦合关系如何降低类型转换怎么正确使用尽可能延后变量定义式的出现变量用到时在定义,不要提前定义,防止变量定义而没有使用的情况,因为代码可能中途返回尽量少做转型动作转型就是破坏语言的类型系统,带来问题是必然的以C++的转型...

2019-09-03 10:55:00 118

转载 高效C++:设计与声明

  C++软件开发可以理解为设计一系列的类,让这些类相互使用,最终实现我们所需要的功能。类与类之间的相互关系可以很复杂,也可以很简单,如何简单高效的描述类与类之间的关系是设计的难点之一。遵循本文所提供的方法,将会给你一些灵感。让接口容易被正确使用,不易被误用限制类型的办法:建立新类型,限制类型上的操作,束缚对象的值、消除客户管理资源的责任限制函数的入参类型,...

2019-09-03 10:30:00 85

转载 高效C++:资源管理

  C++中资源泄漏一直都是老大难的问题,特别是在嵌入式环境中,一点点的资源泄漏,加上长时间的运行们就会导致程序崩溃,这种问题定位非常困难,无规律偶发。解决问题的一种方式是使用特定工具检查内存泄漏,优点是简单,可以直接找出泄漏的函数,缺点是复现,时间长,不同工具的使用方式不同,不统一,在私有平台和编译器上可能无法使用。另一种解决方式是在开发时就对所有的资源进行管理,从根本上解决资源泄漏的...

2019-09-02 19:47:00 116

转载 高效C++:构造/析构/赋值

了解C++默认提供和调用的函数编译器会自动为每一个空类创建构造函数、拷贝构造函数、赋值运算符以及析构函数不要使用编译器自动创建的函数,要杜绝这种情况发生,自己编写这些函数如果不想使用编译器自动生成的函数,要明确拒绝编译器默认提供的函数,不仅不能给编程带来便利,而且会给在某种情况下引入难以定位的bug,因此应该明确拒绝拒绝的...

2019-09-02 18:52:00 168

转载 高效C++:让自己习惯C++

视C++为一个联邦语言面向过程,面向对象,泛型编程,元编程,C++同时支持,强大而迷惑C++语言可以分为如下4个部分:C,C语言相同C with Class,包括封装、继承、多态...Template C,模板元编程STL,标准C++的一部分,主要是和容器、迭代、算法等有关每个部分有每个部分自己的...

2019-09-02 16:08:00 171

转载 高效C++:序

  C++的语法全而复杂,如何简洁高效的使用C++的各种语法,是一个值得研究的问题,特别是对于刚入门或是有小几年开发经历的同学,了解或是熟悉这个问题,所得到的提升无疑是巨大的。向前人学习,站在巨人的肩膀上,会让你很爽。  <Effective C++>这本书开篇就很牛逼的说到:C++成员分为两类,一类是读过Effective C++的程序员,一类是没有读过Effectiv...

2019-09-02 15:51:00 69

转载 python基础

0.注释# 单行注释''' ''' 多行注释:是一个没有名称的字符串变量 1.数据类型# Number(数字) int long float 1.23e9 complex 1 + 2j# String(字符串) 单引号或是双引号包含的字符串...

2019-09-02 14:17:00 112

转载 设计模式:个人理解

个人理解    23种设计模式是前人在工作中的经验总结,按照设计模式进行设计,可以使你少走弯路。当然,也并不是一定要按照设计模式要求的那样,只要进行开发就使用设计模式。工程开发中,需要牢记一点:能够正常工作,没有bug的代码就是好代码。只有在保证这一点的基础上,才可以考虑代码的架构,可扩展性,可维护性,才需要使用到设计模式。很正常的,合理的设计模式需要一定的代码功底,需要考虑到代码的...

2019-08-30 15:01:00 68

转载 面向对象7大设计原则

原则一:单一功能原则Single Responsibility Principle, SRP核心思想:解耦和增强内聚性(高内聚,低耦合)类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题原则二:...

2019-08-30 14:36:00 81

转载 设计模式:interpreter模式

理解:可以广义的理解为创造一种语言,实现该语言的解释器,然后用创造的语言编写程序对比:如xml就是一种语言,解析xml的代码就是解释器例子://目标:定义4中几种命令,使用C++解析//如下://command go end//command back end//command right end//command left end//repeat...

2019-08-30 14:34:00 104

转载 设计模式:command模式

目的:将命令设计成类的形式,并可以组织成队列优点:在需要的情况下,可以比较容易地将命令记入日志可以容易的实现对请求的撤销和重做由于新的具体命令类不影响其他的命令类,因此增加新的具体命令类很容易例子:class Receiver{public: void action() { cout << "do action." &...

2019-08-30 14:27:00 95

转载 设计模式:proxy模式

目的:为其他对象提供一种代理以控制对这个对象的访问理解:尽管Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问例子:class Print //统一接口{public: virtual void show() = 0;};class StringPr...

2019-08-30 14:20:00 54

转载 设计模式:fly weight模式

目的:通过共享实例的方式来避免重复的对象被new出来,节约系统资源别名:享元模式例子:class Char //共享的类,轻量级{ char c;public: Char(char c) { this->c = c; } void print() { cout << c << c...

2019-08-30 14:01:00 213

转载 设计模式:state模式

核心: 把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化例子:class State //状态接口{public: virtual void show() = 0;};class NormalState: public State //正常状态{public: virtual void show() {...

2019-08-30 11:44:00 75

转载 设计模式:memento模式

目的:在不破坏系统封装性的前提下,记录系统每一步的状态,可以做到状态回退和前进方法:定义一个数据类,保存所有相关数据定义一个管理类,提供保存和恢复的接口具体操作类调用管理类的保存和恢复接口例子:class Memento //状态数据类{ int money;public: Memento(int money) { thi...

2019-08-30 11:36:00 78

转载 设计模式:observer模式

目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新例子:class Observer //观察者{public: virtual void upadte() = 0; //接受通知};class Manager // 管理者{public: virtual void registe...

2019-08-30 11:29:00 95

转载 设计模式:mediator模式

目的:解决多组件之间的通信问题,使得组件之间的通信变得简单核心:提供一个管理类,用来处理组件之间的通信,所有的组件只和管理类通信,组件彼此之间不在单独通信例子:class Mediator{public: virtual void Send(string &message, Person *person) = 0; virtual vo...

2019-08-30 11:20:00 104

转载 设计模式:decade模式

目的:为系统中的一组联动接口提供一个高层次的接口,从而降低系统的复杂性优点:使用窗口模式可以使得接口变少继承关系图:例子:class Subsystem1{public: void Operation() { cout << "Subsystem1::Operation" << endl; }};...

2019-08-30 11:10:00 173

转载 设计模式:chain of responsibility模式

目的:弱化发出请求的对象和处理请求对象的之间的关系理解:每个处理请求的对象仅仅只关注自己能处理的请求,不关系其他请求优点:无需一个管理类来匹配所有的请求,更灵活责任链可以动态的调整Andorid中事件处理框架就使用了责任链模式继承关系图:例子:class Trouble{ int num;public: Trouble(in...

2019-08-30 11:01:00 76

转载 设计模式:visitor模式

核心:将数据结构和数据的处理分开注意:注意函数的参数传递和调用关系例子:class Element;class Visitor{public: virtual void Visit(Element* element) = 0;};class Element{public: virtual void accept(Visit...

2019-08-30 10:38:00 163

转载 设计模式:decorator模式

两点:继承同一虚接口,实现数据一致性桥接方式指向被装饰类目的:在不改变被装饰类功能的前提下增加新功能特点:继承是子类和父类强耦合,桥接是低耦合例子:class Print //抽象接口{public: virtual int getColumns() = 0; //横向 virtual int getRows() = 0; /...

2019-08-30 10:14:00 55

转载 设计模式:composite模式

目的:使容器和内容具备一致性实现:将对象组合成树形结构以表示“部分-整体”的层次结构实例:文件夹中可以包含文件夹也可以包含文件例子:class Item //接口定义{public: virtual int getSize() = 0; virtual string getName() = 0; virtual void add(Item *ite...

2019-08-30 10:04:00 56

转载 设计模式:strategy模式

思想:将算法进行抽象,然后使用桥接的模式使用算法的抽象接口,达到算法整体替换的目的理解:和桥接模式相同,只是桥接的两边分开的思想不同例子:class Algrithm //算法的抽象{public: virtual void algrithm() = 0;};class AlgrithmA: public Algrithm{public:...

2019-08-30 09:53:00 70

转载 设计模式:bridge模式

目的:将“类的功能层次结构”和“类的实现层次结构”分类类的功能层次:通过类的继承添加功能(添加普通函数)类的实现层次:通过类的继承实现虚函数理解:和适配器模式中的桥接方法相同例子:class DisplayImpl{public: virtual void open() = 0; virtual void print() = 0; virtua...

2019-08-30 09:47:00 87

转载 设计模式:abstract factory模式

含义:抽象工厂将“抽象零件”组装成“抽象产品”理解:相比于工厂方法模式,可以根据不同的接口创建不同的产品,说白了就是将一个接口变成两个接口,各自返回不同的抽象产品例子:class Car //抽象产品{public: virtual void name() = 0;};class BenciCar: public Car{public:...

2019-08-30 09:34:00 71

转载 设计模式:builder模式

使用场景:当需要创建的实例非常复杂时,需要先创建每一个小部分,然后在组装起来理解:区别于模板方法模式,核心方法一个是在父类中,一个是在另一个监管类中,本质类似class Builder{public: virtual void head() = 0; virtual void body() = 0; virtual void tail() = 0;};...

2019-08-30 09:20:00 82

转载 设计模式:prototype模式

使用场景:在不能根据类创建对象的时候,根据已有的对象创建对象不能根据类创建对象的情况:创建一个类的对象时,需要根据多种对象来创建,创建的过程非常复杂难以根据类生成对象例子:class Product{public: virtual Product* createClone() = 0; virtual void use() = 0;};...

2019-08-30 09:13:00 48

空空如也

空空如也

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

TA关注的人

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