代码笔记
文章平均质量分 81
程画
学生
展开
-
汇编语言(第三版)王爽,实验七
assume cs:codedatasg segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995'...原创 2018-05-19 14:12:19 · 2786 阅读 · 0 评论 -
设计模式(八)————适配器模式(Adapter Pattern)
定义:将一个类的一组接口变换成客户端所期待的另一种接口,从而使因接口不匹配而无法在一起工作的两个类能够在一起工作。类适配器通过集成被适配类和目标类,对象适配器通过组合来适配被适配者。UML类图:C++实现:#include<iostream>using namespace std;class Duck{public: virtual void Quac...原创 2019-06-25 22:08:04 · 92 阅读 · 0 评论 -
设计模式(九)————外观模式(Facade Pattern)
定义:定义一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。UML类图:C++实现:#include<iostream>using namespace std;class Shape{ virtual void Draw() = 0;public: virtual ~Shape() = default;};cla...原创 2019-06-25 22:13:31 · 105 阅读 · 0 评论 -
设计模式(十)————装饰者模式(Decorator Pattern)
定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更加灵活。UML类图:C++实现:#include<iostream>#include<string>using namespace std;class Beverage{public: string description = "Unkonw Beverage"...原创 2019-06-25 22:17:07 · 115 阅读 · 0 评论 -
设计模式(十一)————状态模式(State Pattern)
定义:允许一个对象在其内部状态发生改变时改变他的行为。对象看起来似乎修改了它的类。(类的行为是基于它的状态改变的,使用状态模式可以有效解决代码中if-else和switch的case太多的问题,使代码更容易维护)UML类图:C++实现:#include<iostream>#include<string>using namespace std;cla...原创 2019-06-26 13:14:56 · 106 阅读 · 0 评论 -
剑指offer——重建二叉树
题目的意思是给出一颗二叉树的前序遍历和中序遍历,让你构建出这颗二叉树只要观察出针对每一颗子树的处理都是相同的,就可以知道这是典型的考察分治的题目,这题也就迎刃而解了。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *r...原创 2019-07-10 22:31:35 · 95 阅读 · 0 评论 -
谈谈C++的四种“cast”类型转换
相比于传统的类型转换,C++中的4种cast作用更加明确,使代码更具有可读性,下面就来依次介绍一下:1.static_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast,这几乎就是传统类型转换的替代(为什么是几乎,下文会提到),比如:double a=10;int b = static_cast<int>(a);相比于传统...原创 2019-07-11 23:31:48 · 1498 阅读 · 1 评论 -
C++虚继承下带有虚函数的类的大小(含多重虚继承,虚继承后完全覆盖等复杂情况)
带有虚函数的虚继承的对象模型比较复杂,所以来整理一下。以下讨论均在visual studio2017以及64位环境的前提下进行;1.带有虚函数的类class A{public: int a_; virtual void foo1() { cout << "A1" << endl; } virtual void foo2() { cout <<...原创 2019-08-20 23:56:27 · 966 阅读 · 2 评论 -
设计模式(七)————模板方法模式(Template Pattern)
定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。(工厂方法是模板方法的一个特殊版本)UML类图:C++实现:#include<iostream>#include<string>#include<mutex>#include<stack>u...原创 2019-06-25 22:03:54 · 123 阅读 · 0 评论 -
设计模式(六)————命令模式(Command Pattern)
定义:将请求封装成一个对象,从而让你是用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。UML类图:C++实现:#include<iostream>#include<string>#include<mutex>#include<stack>using namespace std;cla...原创 2019-06-25 22:01:27 · 91 阅读 · 0 评论 -
设计模式(五)————观察者模式(Observer Pattern)
定义:在对象之间定义一对多的关系,这样一来,当一个对象改变状态,所有依赖他的对象都会收到通知,并自动更新。(在此模式中,一个目标物件管理所有相依于它的观察者物件。并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的的方法来实现。观察者模式有时又被成为模型-视图(Model-View)模式,源-收听者(Listenr)模式或者从属模式)UML类图:C++实现:...原创 2019-06-25 21:58:18 · 114 阅读 · 0 评论 -
《汇编语言(第三版)》王爽,实验八
分析下面的程序,在运行前思考:这个程序可以正确返回吗?运行后再思考:为什么是这种结果?通过这个程序加深对相关内容的理解。assume cs:code code segment mov ax,4c00h int 21hstart: mov ax,0s: nop nop mov di,offset s mov...原创 2018-05-19 19:24:44 · 683 阅读 · 0 评论 -
《汇编语言(第三版)》王爽,实验九
不知道为什么,在win7下用的emu8086,显示会错位,到不了中间位置在网上找了下别人的代码,发现即使是在别人那里能正常显示在中间位置,复制到我这里都会显示为上图所示的样子。下面是代码,定义数据段的时候为了后面不用将ASCII码和属性分开读取,就定义成如下这样比较繁琐的形式了。(其实做的时候第一时间没想到将ASCII码和属性分开写,比如db 'welcome to masm!' db 02...原创 2018-05-20 14:19:42 · 256 阅读 · 0 评论 -
欧拉筛法
很久没发博客了,把这段时间的笔记发一部分上来当做备份了= =想看欧拉筛法的可直接拉到最后相信各位对素数并不陌生,素数就是指不能被除了1和自身以外的别的数整除的数,比如2,3,5,而且根据欧几里得的证明来看,素数是无限的,普通的筛选素数的方法可能对较小的数据能在较短时间内完成筛选,但对于很大的数据(比如1e9)就会花费很长的时间。例如,普通的求素数方法时这样的:int ...原创 2018-05-15 18:24:08 · 16944 阅读 · 4 评论 -
线性时间求最大子数组
#include<iostream>#include<cstdio>using namespace std;int main(){ int a[100]={13,-3,-25,20,-3,-16,-26,18,20,-7,12,-5,-22,15,-4,7}; int tsum=0,sum=0,max=-2147483648; int f; for(int ...原创 2018-05-15 18:29:55 · 333 阅读 · 0 评论 -
C++指针总结(不包括智能指针)
一、指针的类型1.int* p;类似于这种形式的指针,可指向一个对应类型的变量,比如int *p;int a;p=&a;可以让指针p指向整型变量a,int型的指针变量p里面放的是int型变量a的地址。2.int* p[3];表示p是一个数组,数组里面有3个元素,每一个元素都是一个可指向int型的指针变量#include<iostream>u...原创 2019-03-26 15:29:35 · 220 阅读 · 0 评论 -
设计模式(一)————策略模式(Strategy Pattern)
定义:封装一组算法,让算法之间可以相互替换类图:C++实现:#include<iostream>using namespace std;class IStrategy{public: virtual void AlgorithmInterface() = 0; virtual ~IStrategy() = default;};class Str...原创 2019-06-25 21:32:41 · 131 阅读 · 0 评论 -
设计模式(二)————单例模式(Singleton Pattern)
定义:确保某个类只有一个实例,并且自行实例化且向所有类提供这个实例。单例模式有六种常用的创建方式:1.懒汉式(线程不安全)在单线程下,用懒汉式已经足够好了,但是一旦遇到多线程,就有可能出现多个实例。2.懒汉式(线程安全)在并发较低的情况下,该方案也可以使用,但是一旦并发较高,线程锁带来的时间消耗将变得不可接受,于是我们有了双重检查锁写法。3.饿汉式在一开始就获得一个实例...原创 2019-06-25 21:44:10 · 145 阅读 · 0 评论 -
设计模式(三)————迭代器模式(Iterator Pattern)
定义:提供一种方法顺序访问一个聚合对象中的所有元素而不暴露该对象的内部表示。UML类图:C++实现:#include<iostream>#include<string>#include<mutex>#include<stack>#include<vector>using namespace std;cl...原创 2019-06-25 21:47:32 · 101 阅读 · 0 评论 -
设计模式(四)————工厂方法模式(Factory Pattern)与抽象工厂方法模式(Abstract Factory Pattern)
工厂方法模式定义:定义一个创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。UML类图:C++实现:#include<iostream>using namespace std;class Shape{public: virtual void Draw() = 0; virtual ~Shape() = default;...原创 2019-06-25 21:53:38 · 139 阅读 · 0 评论 -
C++虚表详解
使用工具:本文输出内存模型的工具为vs2017开发人员命令提示符,使用方法如图所示:我们使用cl(不是C1,不是C一,是cl,LLLLL)命令cl的语法为:cl [filename].cpp /d1reportSingleClassLayout[className]意思是查看[filename].cpp文件中名称以[className]开头的所有类的内存模型如果文件不在同一...原创 2019-09-03 17:24:04 · 15393 阅读 · 1 评论