- 博客(25)
- 收藏
- 关注
原创 适配器模式
一,什么是适配器模式适配器模式(adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本接口用不兼容而不能一起工作的那些类可以一起工作。二,何时使用适配器模式两个类所做的事情相同或相似,但是具有不同的接口时要使用它。使得客户端可以统一调用同一接口。接口不同时,首先不应该考虑适配器,而是应该考虑通过重构统一接口。除非是双方都不太容易修改的时候在使用适配器模...
2019-08-08 11:44:46
117
原创 01背包问题
1、动态规划(DP) 动态规划(Dynamic Programming,DP)与分治区别在于划分的子问题是有重叠的,解过程中对于重叠的部分只要求解一次,记录下结果,其他子问题直接使用即可,减少了重复计算过程。 另外,DP在求解一个问题最优解的时候,不是固定的计算合并某些子问题的解,而是根据各子问题的解的情况选择其中最优的。 动态规划求解具有以下的性质: 最优子结构性质、子问...
2019-08-05 17:00:05
176
原创 N皇后问题
#include <stdio.h>#include <iostream>#include <math.h>using namespace std;bool Plare(int *ar, int i, int n) //判断是否可以在这一位置插入皇后 ar[i]行 i列{ for(int j =1; j <i; j++) { if(ar...
2019-08-05 11:25:45
180
原创 观察者模式
观察者模式又叫做发布-订阅(Publish/Subscribe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。#include <iostream>#include <string>#include <map>#i...
2019-08-05 11:18:52
158
转载 http协议
关于HTTP协议,一篇就够了HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速...
2019-07-27 15:30:48
126
原创 http协议的版本演变
http 0.9:过时。http 1.0:非持续链接。存在的问题,对于同一个tcp连接,所有的http1.0请求放入队列中,只有前一个请求的响应收到了,然后才能发送下一个请求。可见,http1.0的队首组塞发生在客户端。http 1.1:默认使用持续连接,不必为每一个web对象建立一个新的连接,一个连接可以传送多个对象。允许一次发送多个http请求,也就是说,不必等前一个响应收到,...
2019-07-27 15:29:47
394
原创 快速排序
1、快速排序的基本思想:快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。2、快速排序的三个步骤:(1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 "基准"(pivot)(2)分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在...
2019-07-24 12:38:28
652
原创 冒泡排序
什么是冒泡排序?冒泡排序的英文Bubble Sort,是一种最基础的交换排序。 而我们的冒泡排序之所以叫做冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点向着数组的一侧移动。具体如何来移动呢?让我们来看一个栗子:有8个数组成一个无序数列:5,8,6,3,9,2,1,7,希望从小到大排序。按照冒泡排序的思想,我们要把相邻的...
2019-07-24 12:06:31
221
原创 抽象工厂模式
抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。优点:①易于交换产品系列,由于具体工厂类,例如AbstractFactory *paf = new Factory_2,在一个应用中只需要在初始化时候出现一次,这就使得改变一个具体的工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。 ②它让具体的创建实例过程与客户端分离,客户...
2019-07-22 11:41:44
155
原创 KMP算法
KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则返回-1(常用手段)。首先,对于这个问题有一个很单纯的想法:从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位。这有什么难的?我们可以这...
2019-07-21 23:55:05
198
原创 浅拷贝,深拷贝,写时拷贝
浅拷贝:拷贝构造时复制指针仅仅是对指针的值拷贝,而不开辟新的空间这样就会造成在析构的时候。会对同一块内存释放两次。深拷贝:拷贝构造时会开辟新的内存,并把内存中的值进行拷贝写时拷贝:就是当你在读取一片空间时,系统并不会为你开辟一个一模一样的空间给你;只有在当你真正修改的时候,才会开辟一片空间给你。怎么实现写时拷贝呢?(1)、使用引用计数来实现。所以我们在分配空间时需要多分配4个字节,...
2019-07-21 21:36:57
146
原创 工厂方法模式
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码进行。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品需要加...
2019-07-21 20:11:12
140
原创 简单工厂模式
#include <iostream>#include <exception>using namespace std;class Operation//运算类{public: Operation() { cout << "this is Operation()" << endl; } virtual ~Operation()...
2019-07-21 16:24:01
173
原创 C++的四种类型转换方式
int a = 10;double d = static_cast<double> a;static_cast:用于基本类型和继承关系的转换,更改变量内部表示(最常用)reinsterpret_cast:将指针解释为另一种指针,不修改指针指向的数据(指针)const_cast:去除constdynamic_cast:继承类对象的指针或引用的转换(运行时)一...
2019-07-20 21:39:45
184
原创 单例模式
单例模式的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个实例。TEXT 1:使用懒加载,只有在使用时才实例化。class Singleton{public: static Singleton *Instance();private: Singleton() { cout <&l...
2019-07-20 01:35:57
92
原创 函数重载 函数符号生成规则
函数的默认值 sum(int a, int b, int c = 10)①自右向左, 依次赋值。②同一个形参只能赋一次。3,一般会在声明上给出默认值。4,不能让编译器产生二义性,重载决议不能产生二义性。5,函数重载不依赖返回值。三要素:1,同作用域才能重载。 2,同名 3,参数不同函数符号生成规则C++ 1...
2018-11-27 20:31:26
403
转载 函数的调用约定
函数调用约定前言在C语言中,假设我们有这样的一个函数: int function(int a, int b);调用时只要用result = function(1, 2);这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说...
2018-11-15 18:06:19
157
转载 fork()函数
Version:1.0 StartHTML:000000217 EndHTML:000091839 StartFragment:000040448 EndFragment:000091788 StartSelection:000040617 EndSelection:000091762 SourceURL:https://blog.csdn.net/jason314/article/details...
2018-11-06 20:04:36
158
转载 时间复杂度和空间复杂度详解
算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时...
2018-05-12 20:54:37
162
原创 二维数组如何分配动态内存
两种方法:1.转化为一维数组申请2.先申请全部行首指针,再按行逐行申请1.a=(int *)malloc(sizeof(int),(unsigned)m*n);使用的时候就和一般的二维数组一样。#include "stdlib.h" #include "stdio.h" #include <malloc.h> int main() { int i,j; int n;//这个就是需要...
2018-05-03 09:58:37
555
转载 static的作用(修饰函数,局部变量,全局变量)
(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variablevoid msg() { printf("Hello\n"); } 下面是main.c...
2018-05-02 08:52:27
249
原创 经典递归算法汉诺塔
# include "stdio.h"void move(int n, char a, char b, char c) { if (n == 1) printf("\t%c->%c\n", a, c); else { move(n-1, a, c, b); printf(...
2018-04-18 09:16:51
183
原创 strcat strcpy strcmp strlen函数的实现
1、Strcat函数原型如下:char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{ char * address = strDest; //该语句若放在assert之后,编译出错 assert((strDest != NULL) && (st...
2018-04-14 11:05:42
271
原创 二维数组的传递方式
#include <stdio.h>/********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *********************************/ void print_a(int a[][5], int n, int m) { int i, j; for(i = 0; i <...
2018-04-13 20:54:13
735
原创 正序逆序输出一个n位十进制数字
#include<stdio.h>int Mysqrt(int n){ int i; for(i=0;i*i<=n;i++)//3*3 { ; } return i-1; //return sqrt(n);}//统计十进制n的位数int GetFigures(int n){ int count = 0; do { count++; n /= 10;//丢弃个位 123/...
2018-04-12 20:04:02
427
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人