自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 红黑树相对于普通平衡二叉树的优点

黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。 红黑树(red-black tree) 是一棵满足下述性质的二叉查找树: 1. 每一个结点要么是红色,要么是黑色。 2. 根结点是黑色的。 3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何

2017-04-30 00:36:34 7454

原创 vector的内存分配

stl中有个很重要的东西就是vector,开发中会经常用到,至少我是经常使用,vector的存在可以使开发者不必关心内存的申请和释放。但是,vector的一个缺点就是它的内存分配是按照2的倍数分配内存的。当当前容量对插入元素不够时,分配一块新的内存,这块内存的容量是原vector容量的2倍大小,然后复制旧内存,释放旧内存,可能多次涉及拷贝构造函数和析构函数,如果一个程序需要的内存超过2G的话,那么就

2017-04-30 00:27:54 1071

转载 固定数组随机数

固定数组随机数有时候需要固定数量随机数,但是要保证这些随机数都在一定的范围内且这些随机数不一样。方法1,将其产生的随机数放入一个vector中,每次放入数据的时候对vector进行find,find失败则放入数据。这种方法就不贴代码了,因为性能不高,要是想要一个100万条的随机数,不知何时程序才能执行完,因为find的效率太低了。方法2,将随机数插入set容器中,因为set容器保证插入的数据不一致,

2017-04-26 22:11:13 434

转载 搭建一个简单的http服务器

在之前的博文中, 我陆续说过如何搭建ftp, sftp, tftp服务器, 在本文中, 我们来继续聊如何实战搭建一个http服务器。 http服务器有很多种, 如tomcat,apache等, 然而, 很多新手无法搭建和配置成功, 颇为受挫, 内心不爽。 我保证, 本文搭建http服务器的过程极简化。 搭建http服务器的步骤: 1. 下载http服务器hfs.exe,

2017-04-26 20:32:21 3985

原创 windows下的traceroute

C:>tracert www.wikipedia.org Tracing route to rr.pmtpa.wikimedia.org [208.80.152.2] over a maximum of 30 hops:   1    23 ms    23 ms    23 ms  59.175.32.1   2    23 ms    22 ms    23 ms  221.232.25

2017-04-26 20:16:07 64025

原创 c++好玩的东西

Class 的大小一个空 class 的大小为 1 字节,因为编译器需要安插进去一个 char,使得这个 class 对象得以在内存中被配置独一无二的地址。虽然空 class 大小为 1 字节,但是假如某个类 A 继承该空 class,计算类 A 的大小时会优化父类空 class 的大小,如类 A 为空,sizeof(A) = 1,不空,则为类A真实数据大小。 我们通常说某个 class 内部有

2017-04-23 17:10:10 1625

原创 c++对象模型

何为C++对象模型? C++对象模型可以概括为以下2部分: 1、语言中直接支持面向对象程序设计的部分; 2、对于各种支持的底层实现机制。 语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。本文重点介绍底层实现机制。 在C语言中,“数据”和“处理数据的操作(函数)”是分开声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性

2017-04-23 15:40:32 295

原创 为什么析构函数是虚函数

#include <iostream>using namespace std;class ClxBase{public: ClxBase() {}; ~ClxBase() {cout << "Output from the destructor of class ClxBase!" << endl;}; void DoSomething() { cout << "Do s

2017-04-23 13:52:00 364

转载 蚁群算法基本理解

1.什么是蚁群算法: 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质,并且现在已用于我们生活的方方面面。 2.基本原理: 1)当周围没有信息

2017-04-23 13:30:42 2522

转载 计算机网络常见问题描述

整理一下计算机网络部分的面试常考点,参考书籍:《计算机网络》第五版 谢希仁的那本,希望对大家有所帮助 OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。 五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

2017-04-18 16:54:08 732

翻译 socket通信介绍

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket

2017-04-18 16:51:54 575

原创 字符串函数strcpy,出现的字符截断问题

#include <iostream>#include <string>#include <conio.h>#include <cstdlib>using namespace std;int main(){ char s[]="123456789"; char r[]="1234"; strcpy(r,s); cout<<s<<endl; cout<

2017-04-14 12:50:27 1414

转载 数据库事务四个特点

数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做要么全不做,是一个不可分割的工作单位。 数据库事务的四大特性(简称ACID)是: (1) 原子性(Atomicity) 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。 例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折

2017-04-14 12:27:08 503

转载 C++程序员面试概念必备

.C和C++中struct有什么区别?1> C++中的struct类似于class,有变量,有构造函数、虚函数等,有继承,多态等类的特征;2> C中的struct只有变量,不能有函数,但是可以有函数指针2.C++中的struct和class有什么区别?在C++中,两者区别不大,但是有2个主要的区别1>. 继承权限:struct默认是public继承;class默认是private继承

2017-04-13 21:30:16 1595

原创 给出一个单链表如何只遍历一次就找出中间节点(我们并不知道单链表的长度N)

实现方法:我们可以设置两个指针变量,node *p ,node *q,p每次移动两个位置,q每次移动一个位置,当p.next==null时候,这时候q指针就到了链表的中间位置。 实现代码如下:void search(node *head,node *mid){ node *temp=head; while(head->next->next!=NULL) {

2017-04-13 20:46:48 3738 2

原创 编程实现一个单链表实现创建、测长以及打印

#include <iostream>#include <string>#include <conio.h>#include <cstdlib>using namespace std;typedef struct student{ int data; student *next;}node;node *creat(){ node *head,*p,*s;

2017-04-13 20:19:50 448

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-04-13 20:18:09 312

原创 虚继承和虚函数继承

虚继承: 虚拟继承是多重继承中特有的概念。虚拟基类是为了解决多重继承带来的重复继承,节省内存开销,而引入虚继承的概念。class A;class B:public virtua A;class C:public viirtual A;class D:public B,public C; #include <iostream>#include <string>using namespa

2017-04-12 22:19:15 311

原创 虚函数继承机制

#include <iostream>#include <string>using namespace std;class A{ char k[3];public: virtual void AA() { }};class B:public A{ char j[3];public: virtual void BB() {

2017-04-12 21:26:59 219

原创 C++的三种继承方式详解

#include <iostream>#include <string>using namespace std;class parent{public: parent(int var=-1) { m_npub=-1; m_nptb=-1; m_nprt=-1; }public: int m_npub;p

2017-04-12 21:03:42 392

原创 虚函数代码举例

#include <iostream>#include <string>using namespace std;class A{public: virtual void f() { cout<<"A"<<endl; }};class B:public A{public: virtual void f() {

2017-04-12 20:20:12 507

原创 构造函数和析构函数

#include <iostream>#include <string>using namespace std;class B{private: int data;public: B() { cout<<"default constructor"<<endl; } ~B() { cout<<"destruc

2017-04-12 19:57:07 199

转载 虚函数和纯虚函数的区别

首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 1、简介 假设我们有下面的类层次:[cpp] view plain copyclass A { publi

2017-04-12 17:10:55 167

转载 泛型编程

泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。 (1)定义函数模板(function template) 函数模板是一个独立于类型的函数,可以产生函数的特定类型版本。// implement strcmp-like generic compare functiontemplate <typename T>int compare(const T &v1, const

2017-04-11 00:33:46 170

转载 浅拷贝和深拷贝

用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝

2017-04-11 00:08:11 177

原创 实现Z字数组的输出

#include <iostream>#include <vector>#include <iomanip>using namespace std;int main() { int N; cin>>N; int A[100][100]; for(int i=0;i<N;i++) for(int j=0;j<N;j++) {

2017-04-10 15:55:04 644

原创 构造函数的初始化列表

class A { int N1; int N2;public: A():N1(0),N2(N1+2) {} void print() { cout<<N1<<" "<<N2; } };int main(){ A a; a.print();}结果: 0 2 如果换成A():N2

2017-04-10 14:24:59 244

原创 实现非递归表达

实现f(m,n)=f(m-1,n)+f(m,n-1)的非递归#include <iostream>using namespace std;#define Recusion 0#define Unrrcusion 1#if Recusionint f(int m,int n)//递归表达{if(1==m)return n;if(1==n){return m;}return f

2017-04-10 10:32:04 238

转载 句柄和指针的区别

句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直

2017-04-10 10:28:55 440

原创 迷途指针和空指针

#include <iostream>using namespace std;int main(){ int *p=new int; *p=10; cout<<*p<<endl; delete p; p=0; *p=20;//this is deleted cout<<*p;}迷途指针:当对一个指针执行delete操作后,这样会释放它所

2017-04-10 01:31:05 271

原创 (int*)(&a+1)

int a[]={1,2,3,4,5}; int *ptr=(int *)(&a+1);cout<<*(a+1)<<" "<<*(ptr-1);5 a本身就是一个指针,&a相当于一个指向

2017-04-10 01:11:23 754

原创 指针数组和数组指针

#include <iostream>using namespace std;int main(){ int V[2][10]={{1,2,3.4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}}; int (*a)[10]=V;//数组指针 cout<<**a<<endl; cout<<**(a+1)<<endl;

2017-04-10 00:41:46 199

转载 虚函数表解析

C++ 虚函数表解析陈皓 http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到

2017-04-09 14:16:35 203

原创 字符串合并并处理(C++实现)

按照指定规则对输入的字符串进行处理。 详细描述: 将输入的两个字符串合并。 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。 对排序后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,

2017-04-09 11:39:59 3663

原创 list的C++成员函数

C++ Lists(链表)         Lists将元素按顺序储存在链表中。 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。         STL中 end()指向的总是无效值,取值都用迭代器,用法跟指针差不多。         assign() 给list赋值         back() 返回最后一个元素         be

2017-04-08 21:08:12 379

原创 stack的简单用法举例(C++实现)

int main() { stack<int> stack1; for(int i=0;i<5;i++) stack1.push(i); while (!stack1.empty()) { cout<<" "<<stack1.top(); stack1.pop(); } return 0;}结果为: 4

2017-04-08 20:42:02 537

原创 斐波那契函数非递归实现(C++实现)

int Fibonacci(int n){ if(n<=1) cout<<n<<endl; else { int sum=0,f1=0,f2=1; for(int i=2;i<=n;i++) { sum=f1+f2; f1=f2; f2=s

2017-04-08 01:17:26 725

原创 元素全排列递归实现(C++)

基本思想:对n个元素的全排列,我们可以先进行第一个元素和剩下的n-1个元素进行分别交换然后对剩下的n-1个元素全排列。 for(int i=k;i<=m;i++) { swap(c[k],c[i]); Permutation(c,k+1,m); swap(c[k],c[i]); }

2017-04-08 01:09:13 397

原创 二分查找(C++实现)

int BinarySearch(int *a,const int x,const int left,const int right){ if(left<=right) { int middle=(left+right)/2; if(x<middle) return BinarySearch(a,x,left,middle-1

2017-04-08 00:45:25 237

转载 数据结构面试题

由于这些题,实在太火了。所以,应广大网友建议要求,在此把之前已整理公布的前80题,   现在,一次性分享出来。此也算是前80题第一次集体亮相。   此些题,已有上万人,看到或见识到,若私自据为己有,必定为有知之人识破,付出代价。   所以,作者声明:   本人July对以上所有任何内容和资料享有版权,转载请注明作者本人July出处。 向你的厚道致敬。谢谢。       1.把

2017-04-08 00:43:58 634

空空如也

空空如也

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

TA关注的人

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