自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 KMP算法(C++)

KMP算法:void getNext(const string& needle,int next[]){ const int n = needle.size(); int i = 0; int j = -1; next[i] = j; while (i < n) { if (j == -1 || needle[i] == needle[j]) { +...

2018-07-18 15:55:44 700

原创 链表的归并排序、快速排序、冒泡排序、选择排序

一  链表的快速排序代码如下:void swap(ListNode* a,ListNode* b){ int tmp = a->value; a->value = b->value; b->value = tmp;}ListNode* partitonlist(ListNode* begin,ListNode* end){ if(be...

2018-07-12 14:46:45 205

转载 C++异常处理底层机制详解

说明:本文转载。个人感觉写的非常好。C++异常机制的实现方式和开销分析白杨http://baiy.cn 在我几年前开始写《C++编码规范与指导》一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了。没想到时隔几年以后才有机会把这个尾巴补完 :-)。还是那句开场白:“在恰当的场合使用恰当的特性” 对每个称职的 C++ 程序员来说都是一个基本标准。想要做到这点,就必须要了解语言中每个特性的...

2018-07-11 10:18:04 6725

原创 Dijkstra算法、prim算法和 Kruskal算法详解

1 Dijkstra算法问题描述:在一个图中,给定指定顶点,求该顶点到其它顶点的最短距离。如图所示:这是一个有向图,现在要求解从顶点V1到其它顶点的最短距离。以上图为例,利用Dijkstra算法求解最短距离。步骤:(1)将所有顶点分为两组,一组是未知的即为S,一组是已知的记为W。开始时,S={V1,V2,V3,V4,V5,V6,V7},W={};(2)首先选择顶点V1到其它顶点中距离最短的顶点为已...

2018-07-09 22:27:21 14122

原创 字典树详解

字典树一  简介字典树(单词查找树),是一种树形结构,应用于统计、排序和保存大量字符串。优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无畏字符串的比较,查询效率高于哈希树。二 基本结构字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典树里没有该单词,如果在就在该字母的孩子节点里找是不是有单词的第二个字母,没有说明没有该单词...

2018-07-04 16:07:14 203

原创 C++实现bitmap

代码如下:#include<iostream>#include<vector>using namespace std;class BitMap {public: BitMap(int num) :n(num), mask(0x1F), shift(5), pos(1 << mask), a(1 + n / 32, 0){} void set(int...

2018-06-06 17:19:07 748

原创 动态规划思想以及常见应用

一 动态规划的基本思想以及和贪婪算法、分治法的比较动态规划的基本思想:将复杂问题进行分解,通过求解小规模子问题反推出原问题的结果。动态规划适合求解多阶段决策问题的最优解(可以简单理解为有状态转换的阶段性问题)。这些问题必须满足最优化原理和子问题的无后向性。最优化原理:不管之前的决策是否最优,但是一定要保证从现在开始的决策是在之前决策基础上的最优决策。无后向性原理:当各个子阶段的子问题确定以后,对于...

2018-03-30 18:30:52 4145 1

原创 IO多路复用及select,poll,epoll详解

一 什么是IO多路复用,为什么要IO多路复用。在不使用线程,独立处理文件的情况下,进程无法在多个文件描述符上阻塞。同步阻塞IO:假如其中某个文件描述符没有准备好,进程就会阻塞,不能再处理其它文件,直到该文件描述符准备好。同步非阻塞IO:假如其中某个文件描述符没有准备好,向进程返回一个错误信息,从而避免阻塞。若是采用非阻塞IO,进程需要以某种不确定的方式不断发起IO操作,直到某个打开的文件描述符已经...

2018-03-29 22:40:44 1432

原创 进程通信与线程同步

一  进程通信进程通信是指进程之间信息的交换。当进程之间需要传送大量数据时,需要利用操作系统提供的高级通信工具。其中windows和linux系统有不同的通信工具。windows:管道、共享内存、消息队列、socket。linux:管道、信号、消息队列、共享内存、socket。(1)管道管道连接一个读进程和一个写进程以及实现两个进程通信的一个共享文件(管道)。写进程向管道中输入字符流数据,读进程从...

2018-03-26 20:32:35 896

原创 二叉树的遍历总结

        二叉树是一种重要的基础数据结构,其定义本身是递归的。二叉树有三种遍历方式,同时既可以利用递归来遍历,又可以利用栈来进行非递归遍历。下面是我个人总结出来的遍历。首先定义二叉树的结构:struct BTreeNode{ char data; struct BTreeNode* lchild; struct BTreeNode* rchild; BTreeNode(char c...

2018-03-09 21:15:10 425 5

转载 事件处理模型Reactor和Proactor

Redis中的事件处理采用Reactor模式,最近在学习,分享一下。https://www.cnblogs.com/bitkevin/p/5724410.html

2019-03-17 15:03:18 265

转载 C语言结构体对齐规则

最近在看操作系统,下面这篇文章对内存对齐讲解的非常通俗易懂,推荐一下:https://www.cnblogs.com/tsw123/p/5837273.html

2019-03-12 10:55:59 265

原创 类中数据成员类型的探讨

        在C++中,数据成员不能被指定为自身类型,但是可以是自身类型的指针 或者引用;在类体中,静态成员可以被声明为所属类的类型。              当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间。也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间。对于static类型的数据成员,不是存储在对象实例中,而是存储在全局变量区;对于指...

2019-02-16 10:31:55 1486

原创 求图中所有路径

阿里巴巴测评题: 思路:从某一个顶点开始,对其进行深搜,找到以它开始的左右路径,注意必须从头结点开始。代码如下:#include <iostream>#include <map>#include <vector>#include <algorithm>using namespace std;using std::vector;...

2018-07-25 22:18:25 3077

原创 广度优先搜索求最短路径及其具体路径

问题:在二维矩阵中,给定起始点和终止点,求从起始点到终止点的最短路径。其中矩阵值为1代表可以通过,0代表障碍。代码如下:#include <iostream>#include <vector>#include <queue>using namespace std;using std::vector;struct point{ int x;...

2018-07-24 17:20:14 5839

原创 互斥锁、读写锁、自旋锁的介绍

(1)互斥锁在访问共享资源之前对锁进行加锁操作,在访问完成之后对锁进行解锁操作。加锁后,任何视图访问加锁的线程都会被阻塞,知道当前线程解锁。如果解锁时有一个以上线程阻塞,所有该锁上的线程都变为就绪状态。第一个变为就绪状态的线程又执行加锁操作,其它线程又会进入等待。只有一个线程可以访问被互斥锁保护的资源。(2)读写锁(rwlock)(读模式共享,写模式互斥)三种状态:读加锁、写加锁、不加锁。一次只有...

2018-07-09 19:32:50 709

原创 最短路径算法

问题:求图中某个顶点到其它顶点的最短距离。在这里采用邻接矩阵表示图。图由顶点和边构成,两个顶点之间有一条边,边的长度即为路径的长度。其抽象模型如下:解法1:Dijkstra思想接班思想:设置顶点S,包含已经确定最短长度的所有顶点,初始时,集合S里面只有顶点0,然后在集合S外与0连通的顶点里面选择长度最短的作为已经确定的顶点,加入集合S,然后更新到所有未确定最短长度顶点的长度。重复上述过程,直至所有...

2018-06-28 20:27:10 314

原创 top K 问题的解法

问题:输入n个数,求其中最小的k个数。对于该问题,有以下几种思路:(1)全排序。使用快速排序,然后取前k个数。(2)

2018-06-27 16:41:03 304

原创 程序的链接过程简介

程序的链接过程:一 连接器的基本功能1 对各个目标模块中没有定义的变量,在其它目标文件中找到相关的定义2 把不同目标文件中生成的相同类型的段进行合并3 把不同目标文件中的变量进行地质重定位二 可执行文件的装载动态链接库:程序在运行的时候才去定位这个库,并且把这个库链接到进程的虚拟地质空间。对于某一个动态链接库而言,所有使用这个库的可执行文件都共享同一块物理地址空间,该物理地址空间在当前动态链接库第...

2018-06-21 10:20:03 2955

原创 IO中同步与异步、阻塞与非阻塞的区别

(1)基本概念阻塞和非阻塞描述的是用户线程和系统调用交互时的的状态:阻塞调用:当前线程会被挂起。内核调用只有在得到结果后才会返回。非阻塞调用:不能立刻得到结果之前,该调用不会阻塞当前线程,而会立刻返回。同步和异步描述的是用户线程和内核交互时的方式:同步:用户线程与内核交互时,在得到内核回应结果前只能等待;异步:用户线程在与内核交互时,不需要等内核回应结果,可以直接返回。通俗理解(别人的理解):同步...

2018-04-12 19:59:30 255

原创 数组指针、指针数组、函数指针、指针函数

最近遇到很多关于指针的概念问题,现在对几个容易模糊的概念进行对比:一 数组指针与指针数组数组指针:是一个指针,不过指针指向的是一个数组。指针数组:是一个数组,不过数组元素是指针。example:int *p[10];//[]优先级大于*,这是一个指针,指向具有10个整形元素的数组。等价于 int(*)p[10];int (*p)[10];//这是一个指针数组,数组元素都是指向整形的指针。二 函数指...

2018-04-01 15:49:59 176

原创 程序的编译过程简介

程序的编译过程:将预处理后的文件进行一系列词法分析、语法分析、语义分析以及优化后产生相应的汇编代码文件。步骤一:词法分析。将源代码的字符序列分割成一系列的记号。同时将表示符放到符号表,将数字、字符串常量等存放到文字表。步骤二:语法分析。语法分析器对产生的记号进行语法分析,从而产生语法树。即根据用户给定的语法规则对输入的记号序列进行解析,构建语法树。步骤三:语义分析。语义分析是对表达式的语句进行分析...

2018-03-29 10:12:27 421

原创 智能指针原理及C++实现

智能指针是一个类,在类的构造函数中传入一个普通指针,析构函数释放指针。引入智能指针是为了更好的管理内存,防止内存泄漏等问题。实现方法:采用引用计数的方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。其遵循以下规则:    (1)每次创建类的新对象时,初始化指针并将引用计数置为1;    (2)当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相...

2018-03-18 16:26:51 226

原创 N queen问题

问题描述:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?问题推广到n×n格,一起有多少种解法?思路1:深搜。设置一个数组 vector<int> v(n,-1)来保存每一行皇后所在的列号。对于每一行,从第一列开始到最后一列,判断是否可以放置。void solutionOfaNqueen(vector<in...

2018-03-15 11:21:24 363

原创 有关排列问题的学习

(1) next_permutation如何找出一个排列的下一个排列?比如对于排列:123,132,213,231,312,321,当知道其中某个排列后,如何知道对应的下一个排列。其原理如下:对于排列:vecttor<int> v={1,2,4,3,6,7,5}步骤1:从后往前遍历,找到第一个比后面的数大的数的下标,因而6的下标是m=4;步骤2:从后往前遍历,找到第一个比v[m]大的数...

2018-03-14 20:00:11 164

原创 MFC实现FTP客户端

        因项目需要,利用MFC写了一个客户端,实现远程文件的上传,下载,删除等功能。        服务器用的是免费的Home Ftp Server。首先简单介绍一下CInternetSession类和CFtpConnection类,他们包含在afxinet.h头文件中,是MFC中对连接FTP服务器功能的一个封装。主界面:一.连接过程void CMFCApplication2Dlg::Co...

2018-03-11 23:02:26 6324 2

空空如也

空空如也

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

TA关注的人

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