自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

慧声慧影

我是一只小菜鸟,小呀小菜鸟

  • 博客(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 1181

原创 类成员函数的重载、覆盖和隐藏(重写)的区别

1)重载的概念相对比较简单,只有在同一个类定义中的同名成员函数才存在重载关系,主要特点是参数类型和数目有所不同(不能仅仅依靠返回值类型的不同来区分重载函数)。另外重载和成员函数是否是虚函数无关。总结一下成员函数被重载的特征:1、相同的范围(同一类中)。2、相同的函数名字。3、不同的参数列表。4、virtual关键字可有可无。2)成员函数覆盖是指:在派生类中覆盖基类中的同名函数,要求基类函数

2014-04-25 22:56:06 1063

原创 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 762

原创 static关键字的作用

static是不考虑类,static的作用1)隐藏当我们同事编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。如果加了static将会对其他文件隐藏。利用这一特性可以在不同的文件中定义同名的函数或者同名变量,而不必担心命名冲突。2)static对于函数而言仅仅只是隐藏,对于变量还有两个作用。1、static变量默认初始话为0。2、保持局部变量内容

2014-04-25 21:21:38 477

原创 sizeof和strlen的区别

sizeof和strlen的区别1)sizeof是个操作符,strlen是库函数。2)sizeof的参数可以是数据的类型,也可以是变量,而strlen只能是以结尾为’\0’的字符串作参数。3)编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型内存的大小,而strlen计算的是字符串实际的长度。4)数组做sizeo

2014-04-25 20:32:42 511

原创 一些位操作的技巧

计算二进制中1的个数int CountOf1(int num){ int count=0; while(num) { ++count; num&=(num-1); } return count;}

2014-04-23 14:51:17 502

原创 向左旋转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 449

转载 两个很大的正数相乘

输入两个很大的正数(用C字符串去)

2014-04-22 13:50:38 567

转载 将字符串转换成整数

将字符串转换成整数输入一个表示整数的字符串,把该字符串转换成整数并输入。例如输入字符串”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 455

原创 字符串库函数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 843

转载 赋值运算符函数

赋值运算符函数的代码需要关注几点1) 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(即*this)。只有返回一个引用,才可以允许连续赋值。否则如果函数的返回值void,该赋值运算符将不能做连续赋值。2) 是否把传入的参数的类型声明为常量引用。参数声明为引用可以避免无谓的消耗,提高代码的效率。同时我们希望赋值运算符函数内不会改变传入的实例的状态。因此应该为传入的引用

2014-04-07 20:43:36 464

转载 剑指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 447

转载 如何在系统中查找内存泄漏(memory leak)程序?

为什么系统内存足够的大,但当程序运行了一段时间后,系统还会报内存不够用,无法产生新进程? 当出现此种情况时,我们通常会还疑有内存泄漏。首先回答什么是内存泄漏。内存泄漏是一种程序错误,有内存泄漏的程序会不断向系统申请内存,然后使用所申请的内存,当不再使用这些内存时也不释放它们,其占用的内存量越来越大。如果有内存泄漏的程序是一个长时间运行的应用程序,如交互式应用程序,这就会给系统带来非常严重的

2014-04-03 13:21:08 673

转载 归并排序

归并排序的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了?可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了.这样通过先递归的分解数列,再合并数列就完成了归并排序。void MergeArray(int* arra

2014-04-01 11:44:18 443

转载 希尔排序及其优化

希尔排序的本质就是分组插入排序,希尔排序也叫缩小增量排序。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的 元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高

2014-03-31 23:05:52 758

原创 插入排序及其优化

插入排序,假定之前的元素已经是有序的,新插入的一个元素,从后面开始比较,比这个新插入的数大的往后移。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 451

原创 冒泡排序及其优化

排序是算法的基础,同时排序算法中也蕴含着丰富的算法思想。未来几天我就梳理一下几种常用的排序,今天首先我就总结一下是冒泡排序。数组大小为n1) 比较两个相邻元素,如果前一个元素大于后一个元素,则交换。2) 这样对数组第0个元素到第n-1个元素遍历一趟,最大的元素一定“沉到”最后面。3) n=n-1.重复步骤2很简单,直接附上代码void BubbleSort1(int* ar

2014-03-29 14:57:00 504

原创 找出在数组中出现次数超过一半的那个数

也就是编程之美那道“寻找发帖水王的题目”, 开始看这道题目的时候,首先想到就是遍历,遍历数组所有的元素,比较元素出现的次数是否大于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 823

原创 指针的几种形式(常量指针和指针常量,指针数组和数组指针,指针函数和函数指针,数组和指针)

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 765

原创 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现

其实自己没有写博客的习惯,就是个小菜鸟。因为接下来要找工作的原因,将之前学习过数据结构或者算法温习一下,记录下来,日后回头看看自己当初的稚嫩和不成熟。树是常用的数据结构,二叉树是最简单的一种树,没有其他树(排序树、红黑树等)的约束,树的遍历也是各大公司笔试时的常见考点。二叉树的结构定义如下:struct BinaryTreeNode{ int m_nValue;

2014-03-14 15:07:20 907

原创 工厂方法模式 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 545

原创 简单工厂模式 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 658 1

K-NN算法 C++实现

这是一个简单的用C++实现KNN算法.对于初学者了解KNN算法思想会很有帮助.

2013-01-04

空空如也

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

TA关注的人

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