C++
文章平均质量分 50
qinghezhen
这个作者很懒,什么都没留下…
展开
-
浅谈C++内存分配
C++内存分配由五个部分组成:栈、堆、全局代码区、常量区、程序代码区。如下图所示:1、栈区:函数中定义的局部变量放在栈中,函数执行结束时存储单元自动释放。栈内存分配一般采用寄存器来存取,存取效率高但是内存容量有限。2、堆区:通常在堆中进行动态分配。程序运行的时候用new或malloc申请一定大小的内存,用delete或free释放之前申请原创 2013-06-18 19:46:52 · 1143 阅读 · 0 评论 -
按层遍历二叉树(队列实现)
按层遍历二叉树的思路: 1)创建一个队列用于保存指向Node节点的指针 2) 每遇到一个节点就遍历该节点,然后将该节点不为空的孩子压入栈中 3) 从栈中取出一个节点,回到第二步原创 2013-09-13 22:10:18 · 1301 阅读 · 0 评论 -
两种方式遍历二叉树--递归方式和非递归方式
用递归的方法遍历二叉树很简单,但是非递归的遍历二叉树就比较困难了。在非递归方法中,我们需要栈stack的帮助。以下是分别用递归方式和非递归方式写的前、中、后序遍历二叉树的方法,经过验证结果是正确的。原创 2013-09-11 23:07:02 · 1160 阅读 · 0 评论 -
设计模式之装饰者模式Decorator Pattern
近来在读《Head first设计模式》这本书,感觉很不错只是书中的代码是用Java写的。因为我熟悉的是C++,于是自己写了C++的例子程序。首先说说我的感受吧,学C++的话,先看《C++ Primer》搞明白了C++的各种语法,对封装、继承、多态有初步的认识。然后学点设计模式,设计模式是针对具体事例的解决方案,是前人编程的经验,很值得借鉴! 说个具体事例吧,在买电脑的时候我们通原创 2013-08-18 00:49:26 · 1154 阅读 · 0 评论 -
两种方法实现从尾到头打印链表--栈和递归
两种方法实现从尾到头打印链表--栈和递归原创 2013-09-08 21:02:21 · 865 阅读 · 0 评论 -
单件模式(Singleton Pattern)之C++实现
单件模式确保一个类只有一个实例,并提供一个全局访问点。#include #include using namespace std;class Singleton{public: static Singleton* GetInstance(); void print(); void write(string strTmp);private: Singleton(); sta原创 2013-09-07 10:01:45 · 894 阅读 · 0 评论 -
VC用OLE方式读写Excel
本文主要介绍VC环境中使用OLE技术对Excel读写的方法。原创 2013-08-16 21:57:45 · 5247 阅读 · 11 评论 -
逗号表达式
逗号表达式的表现形式如下:表达式1,表达式2,表达式3,......表达式n这里要注意的是:1)逗号表达式的运算顺序是从左向右2)整个表达式的值是最右边的表达式的值3)逗号操作符的优先级在所有运算符中是最低的相信逗号表达式并不难,只是大家经常忽略它。下面看一个网传的笔试题:int i=(j=4,k=8,l=16,m=32);printf("%d",i);原创 2013-06-13 18:33:45 · 790 阅读 · 0 评论 -
聊聊C++中复制构造函数和赋值操作符
复制构造函数:只有单个形参,而且形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为复制构造函数。与默认构造函数一样,复制构造函数可由编译器隐式调用。复制构造函数可以用于:根据另一个同类型的对象显式或隐式初始化一个对象复制一个对象,将它作为实参传给一个函数从函数返回时复制一个对象初始化顺序容器中的元素根据元素初始化列表初始化数组元素赋值操作符:与复制构造函数一样,如原创 2013-06-16 11:48:23 · 726 阅读 · 0 评论 -
C++中函数重载、覆盖与隐藏的区别
重载(overload):指函数有不同的参数表,对同名函数的名称做修饰,然后这些同名函数就构成了不同的函数。在同一可访问区域内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,程序会根据不同的参数列表来确定调用哪个函数。对于重载函数的调用,在编译期间就已经确定,是静态的,它们的地址在编译期间就绑定了与多态无关。另外,重载不关心函数的返回类型。1) int test(int原创 2013-06-13 21:13:01 · 1108 阅读 · 0 评论 -
c++参数传递的三种方式
c++参数传递的三种方式1、按值调用: 形如 int fun(int x)2、指针调用:形如 int fun(int* p)3、引址调用:形如 int fun(int &x) 或者 int fun(const int &x)原创 2013-07-11 22:41:49 · 1056 阅读 · 0 评论 -
C++之explicit
C++中允许一种特殊的声明比变量的方式。在这种情况下,可以将一个对应于构造函数参数类型的数据直接赋值给类变量。编译器在编译时会自动进行类转换,将对应于构造函数参数类型的数据转换为类的对象。但是这种宽松的规则会破坏代码的可读性,并导致难以发现的错误。其实只要在构造函数前加上explicit则会禁止这种自动转换。要注意的是explicit只对构造函数起作用。 下面来举例说明。#inclu原创 2013-07-10 21:35:05 · 932 阅读 · 0 评论 -
malloc、free和new、delete的区别
首先应当明确的是malloc 和free搭配使用,new和delete搭配使用,最好搭配使用否则容易造成内存泄露!malloc/free 是在C语言头文件中定义的原型为:void * malloc(size_t size): 动态配置内存,大小由size决定,返回值成功时为任意类型指针,失败时为NULL。void free(void *ptr):释放动态申请的内存空间,调用free(原创 2013-06-12 20:19:15 · 777 阅读 · 0 评论 -
C++对象占多大内存?
前几天被问到,在C++里建立一个空类什么都成员没有,它占多大内存?我一下子懵掉了,还真没想过这个问题。后来查了下资料终于明白了,且听我慢慢道来。首先我们看一下这个测试程序:#include using namespace std; class Test{};main(){ Test t; cout<<"size :"<<sizeof(t)<<endl;}输出结原创 2013-06-15 15:22:52 · 2592 阅读 · 0 评论 -
求二叉树的深度和宽度
二叉树的深度:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二叉树的宽度:二叉树的每一层中都有一定数量的节点,节点数最多的那一层的节点数叫做二叉树的宽度。假设二叉树的节点有如下数据结构:struc Node{int num;Node* pLeft;Node* pRight;}1)求二叉树的深度根据刚才对二叉树深度的说明原创 2013-10-18 20:18:34 · 7184 阅读 · 0 评论