c++
文章平均质量分 66
MR_kris
king
展开
-
初探浅拷贝与深拷贝
对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再次遇到深拷贝与浅拷贝,认真分析了,写写自己的心得吧。 先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj;转载 2015-07-01 10:34:08 · 256 阅读 · 0 评论 -
创建二叉树以及 前序、中序、后序遍历二叉树
用递归方法建立二叉树 分类: 数据结构与算法 2012-11-01 20:20 3961人阅读 评论(6) 收藏 举报 假设二叉树为: a b c原创 2015-09-07 22:24:56 · 881 阅读 · 0 评论 -
extern c
作者 JasonDing 2014.11.13 16:58 写了264382字,被190人关注,获得了315个喜欢 extern "c"用法解析 字数1875 阅读434 评论0 喜欢8 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处原创 2015-09-27 09:59:47 · 334 阅读 · 0 评论 -
effective c++ 条款2 尽量以const enum inline代替#define
一、 const 和 #define的区别 1、定义:const 是c++修饰符,用来修饰常量;#define是宏定义语句; 2、内存消耗:系统有为const 变量分配内存,存放在静态区,程序运行中只有一个拷贝,#define只是给出一个立即数,有多个拷贝,比const消耗的内存大得多; 3、安全性:const变量有数据类型,编译时会进行类型检查,更安全,#define没有,在预处理原创 2015-10-02 22:12:18 · 316 阅读 · 0 评论 -
c中关键字static的作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。 下面是a.c的内容 char a = 'A'; // global variable原创 2015-01-10 22:42:26 · 361 阅读 · 0 评论 -
为什么不能把构造函数设为虚函数,却可以把析构函数设为虚函数
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。 2. 从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是原创 2015-10-24 09:07:49 · 332 阅读 · 0 评论 -
new/delete 与malloc/free的区别与联系
一、基本概念 malloc/free: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了原创 2015-08-05 10:08:39 · 1621 阅读 · 0 评论 -
函数指针与指针函数
指针函数与函数指针的区别 一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回原创 2015-10-24 09:13:06 · 268 阅读 · 0 评论 -
拷贝构造函数 与拷贝复制函数
拷贝构造函数是对象被创建时调用,赋值函数只能被已经存在了的对象调用 1、拷贝构造函数的使用 1) 一个对象以值传递的方式传入函数体; 2) 一个对象以值传递的方式从函数返回; 3) 一个对象需要通过另外一个对象进行初始化; 深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源原创 2015-10-12 10:07:03 · 597 阅读 · 0 评论 -
递归调用效率问题,递归与循环比较
1.所谓的递归慢到底是什么原因呢? 大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回值。这势必是影响效率的。 2.用循环效率会比递归效率高吗? 递归与循环原创 2015-08-04 21:58:50 · 7793 阅读 · 3 评论 -
数组指针 与指针数组
1、数组指针(指向数组的指针) (1)数组在内存中的表示 创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间。二维数组是特殊的一维数组。 先来看一段代码: [cpp] view plaincopy "font-size:16px;">void main() { in原创 2015-08-04 16:02:24 · 361 阅读 · 0 评论 -
c++ nullptr关键字
从1972年C语言刚刚诞生以来,常数0就扮演着整数(int)0和空指针( null pointer )两种角色。为了避免理解上的二义性,C语言通常使用NULL宏来表示空指针,NULL宏通常被定义为(void *)0或0, 而C++仅仅采用0来表示空指针,这样存在一个问题:比如对于重载函数 fun(char *) 和 fun(int) 的调用来说,若直接用NULL作为参数调用fun(NULL),我们原创 2015-07-02 18:06:45 · 597 阅读 · 0 评论 -
const
const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改, 则函数原创 2015-07-26 11:08:05 · 274 阅读 · 0 评论 -
leetcode2.1.8.3sum
如果之前做过求“和为某值的2个数的组合”这种题,应该不会觉得这道题有难度。但这道题需要去掉重复的解,所以在去重方面需要下功夫,因为单是求解就需要O(n2),如果在求解的循环中还嵌套有其他O(n)以上的去重操作,整体的时间就会到O(n3)以上,所以这是个重点。为了避免这个O(n)以上的去重操作,我们在求出解的过程中需要一些技巧去掉不必要的操作。 解题思路如下: 首先是求解:因为原创 2015-07-14 20:02:23 · 308 阅读 · 0 评论 -
构造函数初探
1 note: c++ 类成员变量初始化顺序与其在声明中的顺序有关,而与在构造函数初始化列表顺序无关。 C++类构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public: int a; float原创 2015-08-08 10:45:57 · 290 阅读 · 0 评论 -
static 变量
static关键字在C/C++中应用广泛,而且有不同的语义。这篇文章,我主要想探讨一下用static修饰变量的时候,它都有些什么语义,这些变量都有哪些特性。 1.源文件中用static定义全局变量 这个变量只能在这个文件中可见,其它任何文件中对这个变量都是不可见的。而且你不可以用extern把这个变量导出去。 2. 头文件中用static定义一个全局变量 这也是唯一一种能在头文件中定原创 2015-07-22 10:40:11 · 374 阅读 · 0 评论 -
内存分配
1 主调函数中分配的内存可以在被调函数中使用 2 被调函数在栈区分配的内存不可以在主调函数中使用原创 2015-07-31 15:04:32 · 244 阅读 · 0 评论 -
strcpy 与memcpy
strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知strcpy函数的原型是:char* strcpy(char* dest, const char* src); memcpy提供了一般内存的复制。即memcpy对于需原创 2015-08-01 21:31:43 · 417 阅读 · 0 评论 -
指针与数组的区别
1 声明一个数组时,其数组名字也是一个指针,指向数组第一个元素 2 数组作为函数参数传递时,自动退化为同类型的指针 C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容原创 2015-07-21 15:47:16 · 334 阅读 · 0 评论 -
c++函数初探
一、递归: 直接或间接的在函数体中调用函数自己的现象 1 数学中的递推式与函数递归 递推:有首项顺序迭代求每一项 (顺序) 函数递归:由第n项求第n-1项...向前逆序迭代求每一项 (逆序)原创 2015-07-21 20:54:48 · 319 阅读 · 0 评论 -
经典递归解决汉诺塔!
算法:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。 当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。 当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上原创 2015-11-01 19:38:38 · 370 阅读 · 0 评论