C/C++
码农的小梦想
不积跬步无以至千里,不积小流无以成江海!^_^
展开
-
二叉树中何为某一值的路径实现
根据《剑指Offer——名企面试官精讲典型编程题》上d转载 2014-08-19 14:48:00 · 600 阅读 · 0 评论 -
pimpl的理解
qinC++中pimpl用法背后的思想是把客户与类的私有部分隔离开。由于客户依赖类的头文件,因此头文件中的任何变化都会影响客户,即使仅是对私有(private)数据或保护(protected)数据的修改。pimpl用法隐藏了类中的这些细节,方法是:将类的私有数据和函数放入一个单独的类中,并保存在一个实现文件中,然后在头文件中对这个类进行前向声明并保存一个指向该实现类的指针。类的构造函数分配这个原创 2014-08-10 16:41:16 · 632 阅读 · 0 评论 -
C/C++的程序占用的内存分布
原文地址:http://www.douban.com/group/topic/10733356/转载 2014-08-12 10:19:01 · 711 阅读 · 0 评论 -
C++中成员函数的重载、覆盖与隐藏
成员函数的重载、覆盖与隐藏成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。8.2.1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与转载 2014-08-27 23:45:49 · 623 阅读 · 0 评论 -
输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m问题
#include #include using namespace std;//输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,//使其和等于m ,要求将其中所有的可能组合列出来.//FindSum(sum,n)=FindSum(sum-n,n-1)+FindSum(sum,n-1);bool FindSum(int sum, int n, vector &转载 2014-09-22 22:27:08 · 2419 阅读 · 0 评论 -
STL中的traits编程技巧
侯捷老师在《STL源码剖析》中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘。如此一说,其重要性就不言而喻了。 之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法自动选择正确的执行流程,在完全任务的同时,也尽可能提高算法的执行效率。那算法如何获知转载 2014-08-29 14:55:16 · 897 阅读 · 0 评论 -
判断输入的数组是不是某个BST的前序遍历序列
研究了《剑指Offer——名企面试官精讲典型编程题》上的代码原创 2014-08-19 11:00:26 · 1593 阅读 · 0 评论 -
求数组中的最长递增子序列
题目:输入一个整形数组,求这个数组中最长递增子序列的长度。假设数组为1, -1, 2, -3, 4, -5, 6, -7。我们定义LIS[N]数组,其中LIS[i]用来表示以array[i]为最后一个元素的最长递增子序列。使用i来表示当前遍历的位置:当i = 0 时,显然,最长的递增序列为(1),则序列长度为1。则LIS[0] = 1当i = 1 时,由于-1转载 2014-09-28 13:21:34 · 560 阅读 · 0 评论 -
红黑树的理解与学习&左旋与右旋操作
http://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91#.E7.94.A8.E9.80.94.E5.92.8C.E5.A5.BD.E5.A4.84原创 2014-10-08 15:36:34 · 3868 阅读 · 0 评论 -
寻找直方图中面积最大的矩形
今天看了一个算法题,觉得转载 2014-10-26 21:19:28 · 517 阅读 · 0 评论 -
static_cast、dynamic_cast、reinterpret_cast和const_cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。转载 2014-10-30 18:45:42 · 609 阅读 · 0 评论 -
const char*, char const*, char* const
const char*, char const*, char* const的区别问题几乎是C++面试中每次都会有的题目。这个知识易混点之前是看过了,今天做Linux上写GTK程序时又出现个Warning,发散一下又想到这个问题,于是翻起来重嚼一下。事实上这个概念谁都有只是三种声明方式非常相似:Bjarne在他的TheC++ Programming Language里面给出过一个助记的方法:转载 2014-08-09 19:33:55 · 443 阅读 · 0 评论 -
函数指针与指针函数返回值的区别!!!
指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针。类型标识符 *函数名(参数表)int *f(x,y);函数指针是指向函数的指针变量,即本质是一个指针变量。int (*f)(int x); /* 声明一个函数指针 */f=func; /* 将func函数的首地址赋给指针f */主要的区别是一个是指针变量,一个是函数。在使用是必要要搞清楚才能正确使用。原创 2013-11-03 11:51:12 · 958 阅读 · 0 评论 -
二叉树镜像的非递归实现
实现了二叉树的镜像,代码如下:原创 2014-08-19 11:16:29 · 1612 阅读 · 0 评论 -
C/C++一道题目的答案-函数指针与指针函数
题目:若有以下说明和定义,在必要的赋值之后,对fun函数的正确调用语句是()。int fun ( int *c){ ...}void main(){ int (*a) (int *)=fun, *b(), w[10], c; ...}A. a=a(w); B. (*a)(&c); C. b=*b(w); D. fun(b);【答案】B.【解析】在原创 2013-11-03 12:58:38 · 1902 阅读 · 0 评论 -
C/C++中指针数组、数组指针、指针函数、函数指针的比较
char *p,这定义了一个指针,指针指向的数据类型是字符型,char *(p)定义了一个指针P;char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型。所以char *p[原创 2013-11-03 11:40:14 · 1050 阅读 · 0 评论 -
C/C++中局部变量,静态局部变量,全局变量,静态全局变量的异同
虽然之前在编程时对这四个“变量”就有不少困惑,但一直没去细究,前两天在联想的笔试题中看到了这样一道题,貌似知道它们的区别却又不能说出其中的原理,今天决定将其弄清楚。局部变量:在一个函数中或复合语句中定义的变量,存储在栈中。局部变量在动态存储区分配存储单元,在调用时动态分配,在函数或复合语句结束时自动释放。静态局部变量:在一个函数中定义局部变量时,若加上static声明,则此变量为静态局部变原创 2013-11-03 10:42:34 · 1113 阅读 · 0 评论 -
函数调用时对象指针与对象引用的区别与关系
在函数入参的时候,使用对象指针会产生副本,会带来时间与空间的消耗,而对象引用则不会。。。指针不会产生副本的,也没有时间和空间上的消耗。引用和指针 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用原创 2014-05-08 11:06:31 · 1014 阅读 · 0 评论 -
C语言中malloc、calloc、realloc动态内存分配的理解
英文全称:malloc:memory allocatecalloc:complex allocaterealloc的前缀re-是重新的意思,就是重新分配。三个函数的申明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t num原创 2013-11-03 11:12:36 · 2857 阅读 · 0 评论 -
终于搞清楚字符串内的\0用法啦,好开心
终于搞清楚字符串内的\0用法啦,好开心啊。在字符串内\后面的是八进制的,所以\8,\9就会报错。八进制三位表示一个字符。所以,\0与\000一样,表示一个字符,\04a(\4a)表示两个字符。而\0a4则表示三个字符。只有当字符串数组内真的放的是\0时,后面的内容就不会打印出来。还有,当char b[]={'1','\0','4','5'};这种写法就不会有问题。但此时5后面就不会\0原创 2013-10-20 16:30:57 · 3817 阅读 · 0 评论 -
C++中的函数指针和函数对象总结
篇一、函数指针转载 2014-08-08 20:38:27 · 392 阅读 · 0 评论 -
静态存储区、动态存储区、堆、栈理解
1、内存分配的三种方式: (1). 从静态存储区域分配:变量在编译时已经分配好,在整个程序运行期间都存在,例如:全局变量,静态全局变量; (2). 从“栈”上分配:函数内的局部变量,在使用时自动从栈上创建内存区域,函数结束时自动释放。由于栈上内存的分配运算内置于处理器的指令集中,使用效率很高,但容量有限; (3). 从“堆”上分配:即动态内存分配,程序员可使用mall原创 2013-11-03 10:36:30 · 998 阅读 · 0 评论 -
C/C++中的转义字符
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n转载 2014-05-08 12:43:23 · 555 阅读 · 0 评论 -
单链表的快速排序算法
今天听同学面友录说道单链表是否可以用快速排序算法,想起自己面百度一面的时候面试官也面到这个问题,由于本人是个小菜鸟,所以花了一个下午的时间整理了一下。算法思想:对于一个链表,以head节点的值作为key,然后遍历之后的节点,可以得到一个小于key的链表和大于等于key的链表;由此递归可以对两个链表分别进行快速。这里用到了快速排序的思想即经过一趟排序能够将小于key的元素放在一边,将转载 2014-10-30 16:48:48 · 963 阅读 · 0 评论