自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

风清扬

大风起兮云飞扬

  • 博客(51)
  • 收藏
  • 关注

原创 C++多态、虚函数表、动态链接,虚函数指针,RTTI

多态多态的概念:基类指针指向派生类的地址,通过实现派生类的重写函数实现同一个函数接口不同的功能。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function)实现的,因为通过父类的指针去调用不同的子类指针对父类虚函数的重写方法实现多态,同样的接口函数可以实现不同的功能。虚函数通过动态绑定实现、动态绑定通过vfptr(虚函数指针)和vftable(虚函数表)来实现的联...

2018-02-27 16:36:04 1132 3

原创 C++继承(单继承、多继承、菱形继承)内存模型的深入研究

继承的概念:继承机制:可以利用已有的数据类型来定义新的数据类型,所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。OOP强调软件的可重用性(software reuseablility).C++提供类的继承机制,解决了软件中代码重用的问题:代码复用继承方式继承方式 基类的访问限定 派生类的访问限定 外部的访问限定 Public:         public     ...

2018-02-27 00:28:56 2867 1

原创 LINUX内核研究----IO复用函数poll内核源代码深度剖析

2018-02-25 22:02:42 288

原创 LINUX内核研究----IO复用函数epoll内核源代码深度剖析

select和poll的效率瓶颈有两个    1、每次调用这些函数的时候都需要将监控的fd和需要监控的事件从用户空间拷贝到内核空间,非常影响效率。而epoll就是自己保存用户空间拷入的fd和需要监控的事件,只需在调用epoll_ctl的时候就把所有的fd和需要监控的事件只进行一次从用户空间到内核空间的拷贝。    2、select和poll在内核中都是采用线性轮询的方式检查整个数组(poll是链表...

2018-02-25 21:45:42 1596

原创 LINUX内核研究----C/C++内存管理glibc运行库底层ptmalloc内存管理源码分析总结

基础知识:32位进程的虚拟地址空间64位进程的虚拟地址空间应用程序的堆栈从最高地址处开始向下生长,.bss段与.Stack之间的空间是空闲的,空闲空间被分成两部分,一部分为heap,一部分为mmap映射区域。Heap和mmap区域都可以供用户自由使用,但是它在刚开始的时候并没有映射到内存空间内,是不可访问的。在向内核请求分配该空间之前,对这个空间的访问会导致segmentationfault(段错...

2018-02-24 20:43:46 792

原创 LINUX内核研究----内核角度看fork(),clone(),vfork() 的异同

Linux系统将进程的创建与目标进程的执行分成两步第一步是从已经存在的进程那里像细胞分裂一样复制出一个子进程。子进程有自己的task_struct结构和系统的堆栈空间,但是和父进程共享其他所有资源。比如说文件描述符,文件的读写指针都停留在一个地方,父子共用。LINUX为复制提供三个系统调用:fork():父进程的所有的资源通过PCB复制给子进程。那么fork底层究竟做了哪些复制?一个函数返回两次是...

2018-02-24 19:49:52 1543

原创 算法----递归回溯求排列组合

#include <stdio.h>#include <stdlib.h>#include <string.h>void swap(char *a,char*b){ char t = *a; *a = *b; *b = t;}void permutation(char *s, int m, int len) { if (m == l...

2018-02-18 16:09:36 624

原创 算法----递归求子集

#include<stdio.h> #include<string.h> char s[50];int index = 0;//标记选择后的字符下标void reSort(char *pArray, int begin,int pLen , int len){ if (pLen == 0) { puts(s); return; } for (i...

2018-02-18 15:47:17 3241

原创 KMP算法

#include<stdio.h>#include<stdlib.h>#define N 25#include<string.h>/*前缀:除了最后一个字符以外,一个字符串的全部头部组合后缀:除了第一个字符以外,一个字符串的全部尾部组合注:子串和主串存在许多的部分匹配的情况下才体现出他的优势*/void GetNext(int next[], ...

2018-02-18 15:11:18 193

原创 memmove处理内存重叠的情况

#include<stdio.h>//处理内存重叠void* memmove(void* des, void* src, size_t count){ if (des == NULL || src == NULL || count <= 0)return des; void* ret = des; char * dest = (char*)des; char* so...

2018-02-18 15:09:03 478

原创 manacher算法之最大回文子串

#include<iostream>#include<string>#include<algorithm>using namespace std;string Manacher(string &s)//预处理偶数回文。比如讲abba处理成#a#b#b#a#,这样就形成以#为对称轴的回文串{ string manachers("#"); fo...

2018-02-18 12:42:53 263

原创 STL的堆算法实现优先级队列

#include<iostream>#include<vector>#include<algorithm>using namespace std;/*利用STL堆算法实现的堆结构,优先级队列的底层就是大小堆*/class heap{public: heap(int *a = NULL, int n = 0) :vc(a, a + n), _s...

2018-02-16 20:05:24 313

原创 vector实现的大根堆结构

class heap{public: heap(int *a = NULL, int n =0) :vc(a, a + n), _size(n) { ;//数组构造堆,下标从0开始 } void insert(int val)//插入到最堆的最后一个位置,并进行从下往上堆调整。 { vc.push_back(val); heapAdjust(0, vc.size());...

2018-02-16 19:43:06 477

原创 顺序循环队列C++实现2倍扩容版本

class CircleQueue{public: CircleQueue(int size = 20); ~CircleQueue(); CircleQueue(const CircleQueue &src); void operator =(const CircleQueue &src); void push(int val); void pop(); int...

2018-02-16 15:25:41 1502 2

转载 #pragma once 与 #ifndef 解析

原文地址:http://blog.csdn.net/slimfox/article/details/1565950为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。    方式一:    #ifndef __SOMEFILE_H__  ...

2018-02-16 13:21:52 185

原创 LINUX内核研究----深入程序加载执行过程

程序的装载执行过程从操作系统的角度来看一个程序最关键的特征是拥有独立的虚拟地址空间。进程的建立:程序启动时,操作系统会新建一个进程来执行该程序,主要分为三个步骤:1、创建一个独立的虚拟地址空间,这一步的映射关系是从虚拟空间到物理内存的映射关系。创建一个虚拟地址空间实际上并不是创建空间,而是内核中创建地址映射需要的数据结构。linux内核对虚拟地址空间进行抽象描述的数据结构是在用于虚存管理的mm_s...

2018-02-16 00:19:39 2117

原创 main函数前后要做的事情

操作系统装载程序之后,首先运行的代码并不是main函数的第一行代码,而是一些特别的代码这些代码负责准备初始化Mian函数执行需要的环境,这些完成后才负责调用mian函数开始执行main函数代码。运行Mian函数之前的代码的函数称之为入口函数,入口函数往往是运行库的一部分而运行库跟平台相关,如linux下的C语言运行库是glibc,glibc下的入口函数是_star。而windows下是Msvc,M...

2018-02-15 21:08:44 675

原创 LINUX内核研究----内核角度看什么是进程

Linux下的进程拥有以下四个要素:进程的四要素:    一、进程有需要执行的代码,也就是CPU指令和被操作的数据。代码相当于进程的剧本,可以和其他进程共用,不一定是该进程所私有。    二、有进程专用的系统堆栈空间。    三、在内核中有描述进程信息和进程占用各项资源的信息的结构体task_struct,用于对该进程进行管理。也就是PCB进程控制块,有这个数据结构,进程才能成为一个接受内核调度的...

2018-02-15 16:11:02 589

原创 LINUX内核研究----地址映射的全过程

内核空间的地址映射:物理地址和虚拟地址之间相差0XC0000000虚拟地址 –0XC0000000 ==物理地址物理地址 +0XC0000000 ==虚拟地址并且内核的页面不交换,不进行换出到磁盘中。因为内核要随时准备服务。Inter X86 32 cpu linux  kernel实模式:CPU一上电强制进去实模式,只能访问2^20==1M的内存且没有程序间隔离,没有内存的读写保护,内存的越界保...

2018-02-15 16:06:34 832

原创 虚拟内存小记

虚拟地址空间:虚拟内存管理方案给每个用户进程分配的一个虚拟的地址空间,由PCB中的虚拟内存管理数据结构mm_struct中的VM_area_数据结构描述。虚拟内存:是一种操作系统的内存管理方案,由MMU硬件单元和操作系统软件单元合作完成。简单的过程描述:CPU发出虚拟地址------------》》》MMU硬件进行地址映射过程的计算-------------》》》》软件是内核提供页目录地址,页表地...

2018-02-15 15:55:58 222

转载 问题收集—— Assertion `type_ == nullValue || type_ == object Value' failed

原文网址:https://www.cnblogs.com/bhlsheji/p/4818221.htmlC++ json库jsoncpp 吐槽 Author:Echo Chen(箱子)Email:chenb19870707@gmail.comBlog:Blog.csdn.net/chen19870707Date:September 28th, 2014Explain     近期在做游戏接入SDK...

2018-02-11 12:26:29 2870

转载 Qt5使用openssl实现RSA数字签名

1、环境安装win7 64安装qt-opensource-windows-x86-5.9.0.exe或更高版本,下载地址安装Win32OpenSSL-1_0_2L.exe 下载地址,最新版本可能因为pro配置问题,总不成功,希望大家提醒2、在Qt5工程的pro中 填写LIBS += -LC:/OpenSSL-Win32/lib/MinGW -llibeay32LIBS += -LC:/OpenSS...

2018-02-10 20:14:02 1824 1

转载 OpenSSL编程-RSA编程详解

嗨!大佟!时间飞逝,记录思绪,致力于C/OOC/C++/Python/Lua/Mail应用研究博客首页个人Wiki开源代码企业应用联系我OpenSSL编程-RSA编程详解本文由 大佟 发表于 2014年06月26日 , 浏览: 38,699次 , 评论: 0条一. RSA PEM文件格式1. PEM私钥格式文件12-----BEGIN RSA PRIVATE KEY----------END RS...

2018-02-10 18:36:29 948

原创 OPENSSL RSA加密算法API

RSA是公钥密码体制的典范,在本实验中,我们的将使用OpenSSL自带的RSA相关函数生成RSA加密体系。下面是可能要使用到的一些函数说明。 (1)RSA *RSA_generate_key(int bits, unsigned long e_value, void (callback)(int, int, void ), void *cb_arg) 函数功能:生成RSA密钥对。 参数说明: bi...

2018-02-10 00:52:23 2005

原创 windows qt 使用openssl API

windows qt 使用openssl API1.下载安装opensslhttp://dl.pconline.com.cn/download/355862-1.html版本:OpenSSL(Win32) 1.0.1g2.配置QT项目文件,添加LIBS += -LC:/OpenSSL-Win32/lib/MinGw -leay32   INCLUDEPATH += C:/OpenSSL-Win32...

2018-02-10 00:38:27 885

原创 快速幂计算

转载学习自:http://www.cnblogs.com/CXCXCXC/p/4641812.html首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下:  假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11...

2018-02-09 22:46:49 235

原创 DFS----Red and Black (POJ1979)

There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can'

2018-02-07 21:29:25 167

原创 算法----水仙花数

题目描述春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。输入描述:输入数据有多组,每组占一行,包括两个整数m和n(100 ≤ m ≤ n ≤ 999)。输出描述:对于每个测试实例,要求输出所

2018-02-04 22:45:36 389

原创 算法----句子翻转

题目描述给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”输入描述:输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)输出描述:对于每个测试示例,要求输出句子中单词反转后形成的句子示例1

2018-02-04 22:42:57 383

原创 算法----网易内推等差数列

如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列 输入描述:输入包括两

2018-02-04 22:33:49 202

原创 动态规划----交错01串

如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。 输入描述:输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'

2018-02-04 22:32:14 394

原创 大数减法(百练ID2736)

描述求两个大的正整数相减的差。输入共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。输出一行,即所求的差。样例输入99999999999999999999999999999999999999999999999999#include#include#includeusing namespace std

2018-02-04 12:56:48 313

原创 括号匹配问题(百练ID3704)

描述在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.输入输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串

2018-02-04 11:16:26 2030

原创 大整数加法(百练ID2981)

描述求两个不超过200位的非负整数的和。输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入2222222222222222222233333333333333333333样例输出55555555555555555555

2018-02-04 11:14:28 203

原创 剑指OFFER----10、矩形覆盖

题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { if(number <= 0)return 0;//尝试摆放,还是斐波那契数列 if(number == 1)retu

2018-02-03 16:12:38 190

原创 剑指OFFER----9、变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloorII(int number) { if(number <= 0) return 0; if(number == 1) return 1; in

2018-02-03 15:50:51 266

原创 剑指OFFER----跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloor(int number) { if(number <= 0 )return 0; int a1=1; int a2=1; int a3=1;

2018-02-03 15:07:12 197

原创 剑指OFFER----7、斐波那契数列

class Solution {public: int Fibonacci(int n) { if (n <= 0)return 0; int a1 = 1; int a2 = 1; int a3 = 1; for(int i = 3;i<=n;++i) { a3= a1+a2;

2018-02-03 15:05:28 147

原创 剑指OFFER----6、旋转数组最小值

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。class Solution {public: int minNumberInRotateA

2018-02-03 14:52:15 155

原创 剑指OFFER----两个栈实现一个队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(!stack2.empty()) {

2018-02-03 14:07:20 157

空空如也

空空如也

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

TA关注的人

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