- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 堆栈的几个经典应用
用两个栈实现队列templateclass CQueue{public: CQueue(){} int size() { return s1.size()+s2.size(); } bool empty() { return size()==0; } void push(T val) { s1.push(val); } void pop() { a
2014-05-07 14:21:25
1251
原创 类成员函数的重载、覆盖和隐藏(重写)的区别
1)重载的概念相对比较简单,只有在同一个类定义中的同名成员函数才存在重载关系,主要特点是参数类型和数目有所不同(不能仅仅依靠返回值类型的不同来区分重载函数)。另外重载和成员函数是否是虚函数无关。总结一下成员函数被重载的特征:1、相同的范围(同一类中)。2、相同的函数名字。3、不同的参数列表。4、virtual关键字可有可无。2)成员函数覆盖是指:在派生类中覆盖基类中的同名函数,要求基类函数
2014-04-25 22:56:06
1148
原创 malloc/free与new/delete的区别
malloc/free与new/delete的区别相同点:都可用于申请动态内存和释放内存。不同点:(1)操作对象不同。malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。由于malloc/free是库函数而不是运算符,不再编译器控制权限之内,所以无法执行构造函数和析构函数。new的执行过程是:首先,调用名为operator new的标准库函数,
2014-04-25 21:33:52
803
原创 static关键字的作用
static是不考虑类,static的作用1)隐藏当我们同事编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。如果加了static将会对其他文件隐藏。利用这一特性可以在不同的文件中定义同名的函数或者同名变量,而不必担心命名冲突。2)static对于函数而言仅仅只是隐藏,对于变量还有两个作用。1、static变量默认初始话为0。2、保持局部变量内容
2014-04-25 21:21:38
517
原创 sizeof和strlen的区别
sizeof和strlen的区别1)sizeof是个操作符,strlen是库函数。2)sizeof的参数可以是数据的类型,也可以是变量,而strlen只能是以结尾为’\0’的字符串作参数。3)编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型内存的大小,而strlen计算的是字符串实际的长度。4)数组做sizeo
2014-04-25 20:32:42
544
原创 一些位操作的技巧
计算二进制中1的个数int CountOf1(int num){ int count=0; while(num) { ++count; num&=(num-1); } return count;}
2014-04-23 14:51:17
532
原创 向左旋转k个字符vs字符串中单词的逆转
#include#include#include #includevoid Reverse( char* pBegin,char* pEnd){ while(pBegin<pEnd) { char temp=*pBegin; *pBegin=*pEnd; *pEnd=temp; ++pBegin; --pEnd; }}//向左旋转k个字符char* Lef
2014-04-22 14:29:01
479
转载 将字符串转换成整数
将字符串转换成整数输入一个表示整数的字符串,把该字符串转换成整数并输入。例如输入字符串”345”,则输出整数345.#includeusing namespace std;enum Status{ kValid=0, kInvalid};int g_nStatus=kValid;int StrToInt(const char* str
2014-04-22 10:14:14
483
原创 字符串库函数strlen,strcmp,strcpy,strncpy,strcat,strncat自定义实现
size_t strlen(const char* str){ assert(str!=NULL); size_t length=0; while((*str++)!='\0') ++length; return length;}不用变量,递归实现的strlen
2014-04-20 20:02:36
886
转载 赋值运算符函数
赋值运算符函数的代码需要关注几点1) 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(即*this)。只有返回一个引用,才可以允许连续赋值。否则如果函数的返回值void,该赋值运算符将不能做连续赋值。2) 是否把传入的参数的类型声明为常量引用。参数声明为引用可以避免无谓的消耗,提高代码的效率。同时我们希望赋值运算符函数内不会改变传入的实例的状态。因此应该为传入的引用
2014-04-07 20:43:36
504
转载 剑指offer的34题 丑数
我们把只包含因子2、3和5的数称为丑数(Ugly Number)。求从小到大的顺序的第1500个丑数。习惯上我们把1当做第一个丑数。这道题暴力的解法就是按照顺序检查每一个数是不是丑数。判断一个数是不是丑数的函数如下:bool IsUglyNumber(int num){ while(num%2==0) num/=2; w
2014-04-04 21:10:09
485
转载 如何在系统中查找内存泄漏(memory leak)程序?
为什么系统内存足够的大,但当程序运行了一段时间后,系统还会报内存不够用,无法产生新进程? 当出现此种情况时,我们通常会还疑有内存泄漏。首先回答什么是内存泄漏。内存泄漏是一种程序错误,有内存泄漏的程序会不断向系统申请内存,然后使用所申请的内存,当不再使用这些内存时也不释放它们,其占用的内存量越来越大。如果有内存泄漏的程序是一个长时间运行的应用程序,如交互式应用程序,这就会给系统带来非常严重的
2014-04-03 13:21:08
742
转载 归并排序
归并排序的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了?可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了.这样通过先递归的分解数列,再合并数列就完成了归并排序。void MergeArray(int* arra
2014-04-01 11:44:18
476
转载 希尔排序及其优化
希尔排序的本质就是分组插入排序,希尔排序也叫缩小增量排序。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的 元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高
2014-03-31 23:05:52
800
原创 插入排序及其优化
插入排序,假定之前的元素已经是有序的,新插入的一个元素,从后面开始比较,比这个新插入的数大的往后移。void InsertSort1(int* array,int n){ if(array==NULL||n<1) return; for(inti=1;i<n;i++) { intke
2014-03-30 19:30:13
478
原创 冒泡排序及其优化
排序是算法的基础,同时排序算法中也蕴含着丰富的算法思想。未来几天我就梳理一下几种常用的排序,今天首先我就总结一下是冒泡排序。数组大小为n1) 比较两个相邻元素,如果前一个元素大于后一个元素,则交换。2) 这样对数组第0个元素到第n-1个元素遍历一趟,最大的元素一定“沉到”最后面。3) n=n-1.重复步骤2很简单,直接附上代码void BubbleSort1(int* ar
2014-03-29 14:57:00
541
原创 找出在数组中出现次数超过一半的那个数
也就是编程之美那道“寻找发帖水王的题目”, 开始看这道题目的时候,首先想到就是遍历,遍历数组所有的元素,比较元素出现的次数是否大于1/2.思路很简单,直接附上源代码。int FindMoreHalfNumber1(int* array,int n){ assert(array!=NULL||n<1); for(int i=0;i<n;++i) { int nTimes=0; f
2014-03-28 23:15:31
864
原创 指针的几种形式(常量指针和指针常量,指针数组和数组指针,指针函数和函数指针,数组和指针)
int const* a;a是指向整形常量的指针,a指向的元素为常量,但a本身可以修改。等效于const int* a; int* const a;a是指针常量,a本身不能修改,但是a的指向的元素可以修改。 const int* const a;a是指向常量的且本身不能修改的指针。 int *a[10];a是指针数组,a是含有10个元素的数组,数组中的元素为
2014-03-28 14:45:16
841
原创 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
其实自己没有写博客的习惯,就是个小菜鸟。因为接下来要找工作的原因,将之前学习过数据结构或者算法温习一下,记录下来,日后回头看看自己当初的稚嫩和不成熟。树是常用的数据结构,二叉树是最简单的一种树,没有其他树(排序树、红黑树等)的约束,树的遍历也是各大公司笔试时的常见考点。二叉树的结构定义如下:struct BinaryTreeNode{ int m_nValue;
2014-03-14 15:07:20
981
原创 工厂方法模式 C++描述
#ifndef ANIMAL_H#define ANIMAL_Hclass Animal{public: virtual void eat()=0;};#endif#ifndef CAT_H#define CAT_H#include"Animal.h"#includeusing namespace std;class C
2013-08-14 09:59:12
582
原创 简单工厂模式 C++实现
#ifndef ANIMAL_H#define ANIMAL_Hclass Animal{public: virtual void eat()=0;};#endif#ifndef CAT_H#define CAT_H#include"Animal.h"#includeusing namespace std;class C
2013-08-13 15:53:33
719
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人