自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 他们在清华的那几年——清华学长语录

(一)  永远不要说你已经尽力了我在高中时体育特别差,跑1000米都很要命,从来都是不及格。到了清华之后,第一节体育课,老师告诉我们每年要测3000米长跑,跑不过不许毕业,取消推研资格。怎么办?于是每天晚上10:30,我们的自习教室关门,操场上的人就多起来了。跑半个小时再回寝室继续学习,练了一个学期,我瘦了40斤,最后考试的时候我仅用了12分56秒就跑下了3000米,我们班最胖的人也在

2011-10-21 10:38:48 554

转载 深入理解C++的动态绑定和静态绑定

为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类

2011-09-05 10:58:53 510

原创 自定义链栈

#include #include using namespace std;templatestruct Node{ T data; Node *next;};templateclass LinkStack{public: LinkStack() { top=NULL; size=0; } ~LinkStack(); void Push(char x); void Pop

2011-04-21 17:27:00 527

原创 复杂度为o(n)的计数排序

<br />假定给定的一串正数,且最大值已知,可以使用这种排序。<br />#include<iostream>using namespace std;const int N=10;void countsort(int *a,int len){ int count[256]={0};//假设最大值为256,这个数组用来标记每个数出现的次数 for(int i=0;i<len;i++) count[a[i]]++; int *temp=new int[len];

2011-04-21 16:47:00 841 1

原创 编写复数类以及++前置和后置的区别

<br />#include "iostream.h" //不这样使用头文件会报错fatal error C1001: INTERNAL COMPILER ERROR //不知为什么//using namespace std;class complex{public: complex() { real=imag=0; } complex(double r, double i) { real = r;

2011-04-21 16:41:00 915

原创 用栈实现括弧匹配

#include#includeusing namespace std;void Bracket(char *a,int len){ stack temp; for(int i=0;i

2011-04-21 16:24:00 971

转载 C++中的单例模式

<br /> 单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。<br />单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显的很不优雅。 使用全局对象能够保证方便地访问实例,但是不能保证只声明一个对象——

2011-03-26 16:40:00 469

转载 位图法

<br />在 8K 字节的内存空间内,如何存 unsigned short 类型数据? <br />一般做法: <br />定义一个数组: unsigned short arrNormal[4096]; <br />这样做,最多只能存 4K 个 unsigned short 数据。 <br />  <br />利用位图法: <br />定义一个数组: unsigned char arrBit[8192]; <br />这样做,能存 8K*8=64K 个 unsigned short 数据。 <br /> 

2011-03-23 21:38:00 1111

原创 任意两个整数相加

#include using namespace std;void ReverseStr(char *result){ int len=strlen(result); char *end=result+len-1; char *start=result; while (end>=start) { char temp=*end; *end=*start; *start=temp; end--; start++; }}///两

2011-03-23 21:00:00 1311

原创 字符串全排列

#includeusing namespace std;int array[100]={0};void permutation(char a[],int start,int end) // 找出字符串的全排列(允许输入有重复字符) { int i; char temp; if(start==end) { for( i=0;i

2011-03-23 20:38:00 462

转载 C++的四个类型转换

C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.具体归纳如下:reinterpret_cast(在编译期间实现转换)该函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换为一个整型数,但不能用于非指针类型的转换.例://基本类型指针的类型转换double d=9.2;double* pd

2011-03-10 20:39:00 450

原创 图的邻接表及遍历

#include #include using namespace std;const int num=100;bool flag[num]={false};struct EdgeNode;struct AdjList{ char vextex; EdgeNode* next;}; //顶点表struct EdgeNode{ int adjvex; EdgeNode* next;}; //边表struct Graph{ int V

2011-03-03 20:42:00 594

原创 图的邻接矩阵及其遍历

#include #include using namespace std;const int MaxNum=100;bool flag[MaxNum]={false};struct Graph{ int VertexNum; //顶点数 int SideNum; //边数 char vexs[MaxNum]; //顶点表 int AdjacentMatrix[MaxNum][MaxNum]; //邻接矩阵};void CreateGraph

2011-03-01 09:53:00 749

原创 动态申请二维数组并释放

<br />#include <iostream>using namespace std;//定义类型Aclass A{public: friend class B; //类型B为友元类private: int **p; //指向二级数组 int m_n1; //行数 int m_n2; //列数public: A(int n1,

2011-02-28 10:09:00 1416

原创 二叉树的创建,遍历等操作

#include #include using namespace std;const int MaxSize=100;struct BitTree{ char data; BitTree *lchild; BitTree *rchild;};void CreatBitTree(BitTree *&T){ char temp; cin>>temp; if (temp=='#') { T=NULL; } else {

2010-11-29 20:59:00 607

原创 八皇后问题

     在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,这就是八皇后问题。有人用图论的方法解出共有92种摆法,这里用c++实现:#include using namespace std; class EightQueens{public: EightQueens(int sum); virtual ~EightQueens(); bool Isvalid(int col, int row); void Prin

2010-11-24 20:59:00 696

转载 指针的引用与正常指针

一、先看一段代码:#include usingnamespace std;void freePtr1(int* p1){   delete p1;    p1 = NULL;}void freePtr2(int*& p2){   delete p2;    p2 = NULL;}void main(){   int *p1 = newint;   *p1 = 1;   freePtr1(p1);   int *p2 = newint;   *p2 = 2;   freePtr2(p2);   system(

2010-11-17 17:16:00 719

转载 实例详解C++友元

在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点:   通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安全。   友元能够使得普通函数直接访问类的保护数据,避免了类成员函数的频繁调用,可以节约处理器开销,提高程序的效率,但矛

2010-11-04 16:35:00 539

转载 static变量和函数

首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数:void Foo() { static int a=3; // initialize std::cout 这里的static int a=3只执行了一次。在main中调用Foo()两次,结果为34.将上面的函数改为void Foo() { static int a; a=3; // not initialize

2010-11-04 09:21:00 469

转载 拷贝构造函数和赋值表达式的区别

拷贝构造函数和赋值表达式的区别一、引入    拷贝构造函数,是用新创建的对象来初始化某内存区域,对于一个已经被初始化的对象来进行operator=操作。class   A;   A a;A b=a;   //拷贝构造函数调用A b(a);   //拷贝构造函数调用A a;A b;b =a;   //赋值运算符调用拷贝构造函数首先是一个构造函数,它调用的时候产生一个对象,是通过参数传进来的那个对象来初始化,产生的对象。operator=();是把一个对象赋值给一个原有的对象,所以如果原来的对象中有内存分配要先

2010-11-04 09:09:00 780

转载 C++笔试题目大全

1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于 malloc/free 是库函数而

2010-11-04 08:54:00 659

转载 c++面试

1.new、delete、malloc、free关系    delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。2.与 delete []区别  delete只会调用一次析构函数,而delete[]会调

2010-11-04 08:51:00 516 1

转载 理解虚基类、虚函数与纯虚函数的概念

引言     一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写一写,下面就和大家讨论一下虚基类、虚函数与纯虚函数,一看名字就让人很容易觉得混乱。不过不要紧待看完本文后你就会理解了。正文       虚基类       在说明其作用前先看一段代码class A{public: int iValue;};class B:public A{public: void bPrintf(){cout

2010-11-03 22:00:00 436

转载 虚函数

1.首先看一下这段代码吧:#includeusing namespace std;class ClxBase{public: ClxBase() {}; ~ClxBase() {cout

2010-11-03 21:54:00 317

转载 二分查找学习札记

二分查找算法基本思想二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.用伪代码来表示, 二分查找算法大致是这个样子的:left = 0, right = n -1while (left     mid = (left + right) / 2  

2010-11-03 21:46:00 435

转载 华为C/C++笔试题

(一) 初级题1. 什么是预编译,何时需要预编译:答:(1) 总是使用不经常改动的大型代码体(2) 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头2. char * const p   char const * p   const char *p上述三个有什么区别?答:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p; //

2010-11-03 21:32:00 1037

原创 合并排序的c++实现

#includeusing namespace std;const int N=10;template class ArraySort{ public: ArraySort(Type *,int ); void Preprint(); void Sort(); void Merge(int ,int ,int ); void MergeSort(int ,int ); void Print(); ~ArraySort(); priv

2010-10-27 20:20:00 603

原创 几种排序实现

#includeusing namespace std;const int N=10;////原地排序就是指不申请多余的空间来进行的排序,////就是在原来的排序数据中比较和交换的排序。////例如快速排序,堆排序等都是原地排序,合并排序,计数排序等不是原地排序void exchange(int &a,int &b){ if(a!=b) { a=a+b; b=a-b; a=a-b; }}void Bubblesort(int

2010-10-27 20:18:00 391

转载 C++中 public,protected, private 访问标号小结

第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。 注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。第二:类的继

2010-10-19 20:51:00 374

转载 原码、反码和补码

(1)原码表示法    原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。    例如  X1= +1010110             X2= 一1001010    其原码记作:            [X1]原=[+1010110]原=01010110            [X2]原=[-1001010]原=11001010    原码表示数的范围与二进制位数有关。当用8位二进制来表示小数原码时,其表示范围:

2010-10-19 20:34:00 697

转载 几种常用排序算法总结

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法:  这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:  复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度log2(n)*n,所有内部排序方法中最高好的,大多数情况下总是最好的。归并排序:log2(n)*n堆排序:log2(n)*n希尔排序:算法的复杂度为n的1.2次幂

2010-10-16 21:36:00 755

转载 strcpy()、memcpy()等的理解

strcpy();原型:extern char *strcpy(char *dest,char *src);功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

2010-10-16 09:45:00 1233

转载 memset用法详解

memest原型 void *memset(void *s,  int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一: 搞反了c 和 n的位置. 一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20) 而不是 memset(a, 20,  0) 第二: 过度使用memset, 我想这些程序员可能有某种心理阴影, 他们惧怕未经初始化的内存, 所以他们会写出这样的代码:

2010-10-15 22:30:00 502

转载 进程和线程的区别

      进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:      简而言之,一个程序至少有一个进程,一个进程至少有一个线程.       线程的划分尺度小于进程,使得多线程程序的并发性高。      另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。      线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在

2010-10-15 09:49:00 489

转载 static用法小结

static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种在C/C++语言中使用, 第三种只在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register(谭浩强, 第174-175页)与auto类型(普通)局部变量相比, static局部变量有三点不同1.

2010-10-13 20:09:00 301

转载 字节对齐

写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时间和空间上的一个权衡。对齐节省了时间。假设一个体系结构的字长为w,那么它同时就假设了在这种体系结构上对宽度为w的数据的处理最频繁也是最

2010-10-13 20:01:00 427

转载 堆排序算法原理以及实例代码

1、 堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 【例】关键字序列(10,15,56,25,30,70)和(70,56,30,25,15,10)分别满足堆性质(1)和(2),故

2010-10-13 19:56:00 657

转载 网络编程

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字(SOCK_STREAM)。基于UDP采用的数据报套接字(SOCK_DGRAM).TCP流式套接字的编程步骤:服务器端程序:1、加载套接字库2、创建套接字(socket)。3、将套接字绑定到一个本地地址和端口上(bind)。4、将套接字设为监听模式,准备接收客户请求(listen)。5、等待客户请求到来;当请求到来后,接

2010-09-21 15:00:00 430

转载 C++中extern “C”含义深层探索

1.引言  C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。2.从标准头文件说起  某企业曾经给出如下的一道面试题:  面试题  为什么标准头文件都有类似以下的结构? #i

2010-09-21 09:06:00 310

转载 计算机类笔试题

1..写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);a = ?答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;改后答案依次为9,10,10,112.某32位系统下, C++程序,请计算sizeof 的值(5分).char str[] = “www.ibegroup.com”char *p = str

2010-09-20 11:07:00 437

空空如也

空空如也

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

TA关注的人

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