- 博客(26)
- 收藏
- 关注
原创 智能指针 同一个
一 C++提供的智能指针总结为什么需要智能指针?1)当抛出异常时,我们可能会忘记释放new的指针,导致内存泄漏,或者说较大的工程中,普通情况也会忘记析构指针2)出现两个指针指向同一块内存时,如果释放时处理不好,会出现释放一个内存两次,或者出现悬垂指针3)更不用说深拷贝和前拷贝的问题了所以提出了如下几种智能指针1 auto_ptr指针的实现:templateclas
2017-04-03 16:40:49
386
原创 strcpy函数的实现
在面试中,实现strcpy函数是一个比较常见的考点,但是并不是每个人都能写的完全正确:第一种写法:char *my_strcpy(char *dst,const char *src) { assert(dst != NULL); assert(src != NULL); char *ret = dst; while((* dst++ =
2017-04-02 21:16:28
376
原创 模板特化
一、为什么要模板特化特化的概念:所谓特化,就是将泛型的东东搞得具体化一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特 定的修饰(例如const或者摇身一变成为了指针之类的东东,甚至是经过别的模板类包装之后的模板类型)或完全被指定了下来。模板为什么要特化:因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该
2017-03-20 22:09:13
1117
转载 C++如何限制类对象只能静态分配或者只能只能动态分配
动态分配就是用运算符new来创建一个类的对象,在堆上分配内存。静态分配就是A a;这样来由编译器来创建一个对象,在栈 上分配内存。(1)动态分配(在堆上分配内存)将类的构造函数和析构函数设为protected属性,这样类对象不能够访问,但是派生类能够访问,能够正常的继承。同时创建另外两个create和destory函数类创建对象。(将create设为static
2017-03-20 21:50:43
1072
转载 EXtern "C"解析
一、深层揭密extern "C" extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。 被extern "C"限定的函数或变量是extern类型的; extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在
2017-03-20 16:25:18
205
原创 C++中四种类型转换方式
一 四种C++类型转换方式1 static_cast用法:static_cast < type-id > ( expression )说明:1 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 2 对type-id 的类型无要求它主要有如下几种用法:用于类层次结构中基类和子类之间指针或引用的转
2017-03-20 15:42:11
1780
转载 C++编译与链接
一、初步认识C++的一个程序的执行可以认为有以下的几个环节源程序->预处理->编译和优化->生成目标文件->链接->可执行文件 首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual Studio,Elicpse,Dev C++等),你可能不会发现程序是如何组织起来的(很多人因此而反对初学者使用IDE)。因为使用IDE,你所做的事情,就是在一个项
2017-03-19 16:52:07
429
原创 补码、反码的相关问题
一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里
2017-03-19 14:32:29
572
原创 float 和double的内存特点
C/C++的浮点数据类型有float和double两种。类型float大小为4字节,即32位,内存中的存储方式如下: 符号位(1 bit) 指数(8 bit) 尾数(23 bit)类型double大小为8字节,即64位,内存布局如下:符号位(1 bit) 指数(11 bit) 尾数(52 bit)下面主要解释,每个部分都是怎么存储的,都是什么意思以float为例
2017-03-19 14:29:15
484
原创 C++小知识点总结
1 运算符的优先级1 括号成员运算符排第一:()【】-> .2)全体单目运算符排第二:++ -- & *! ~sizeof -3)乘除余排第三4)加减第四5)移位五>6)关系六:> = 7)等于不等号排第七8)& ^ | 8 91011)&& || 11 和1213)? :14)赋值2 不能重载的运算符 . .* :: sizeof
2017-03-19 11:52:59
279
原创 经常考到的几种区别
1 引用和指针的区别1)引用不可以为空,必须初始化,指针可以为空,所以在使用指针之前,为了安全起见,一般要做非空判断2)引用不可以改变指向,但是指针可以,常指针不可以改变指向3)引用是个别名,不占内存空间,而指针用于自己的内存空间4)指针和引用++和--的含义不同5)能建立指向数组的指针,但是不能建立数组的引用6)引用比指针更安全由于不存在空引用,一旦初始化后其指向就不
2017-03-19 11:46:48
437
原创 内联函数
1 为什么需要有内联函数当遇到普通函数调用时,程序会保存当前函数的执行现场,将函数中的局部变量及函数地址入栈,然后在将即将调用的新函数加载到内存当中,这个复杂的过程经历了参数的复制,跳转到所用的函数的内存位置,执行函数代码,返回值存储。等函数执行完毕,在获取之前函数调用的地址,回去继续执行那个函数,这是一个很消耗时间的过程。所以内联函数有如下好处:1)编译器不需要调转其他地址执行函数调用,
2017-03-19 11:17:31
434
原创 单链表的排序
一、单链表的插入排序ListNode *insertionSortList(ListNode *head) { if(head==NULL||head->next==NULL) return head; ListNode*p=NULL; ListNode*q=NULL; ListNode*one=NULL; ListNode*first=head; head=head->n
2017-03-17 21:01:33
547
转载 函数指针和函数对象
来自 http://www.cnblogs.com/lvpengms/archive/2011/02/21/1960078.html一、函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数。函数指针的声明方法:数据类型标志符 (指针变量名)
2017-03-13 21:43:14
207
原创 C++ 成员变量的初始化方法总结
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a.引用b.常量c.静态d.静态常量(整型)e.静态常量(非整型)常量和引用,必须通过参数列表进行初始化。静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字参考下面的代码以及其中注释:
2017-03-13 21:30:55
1975
原创 class占用内存问题
一、背景知识1:首先遵从内存对齐规则2:只有虚函数会占4个字节,其他的函数不占内存;无论多少个虚函数,只有这一个指针,4字节。//注意一般的函数是没有这个指针的,而且也不占类的内存;3、静态变量由于属于所有类对象共同所有,所以不占内存二、典型的计算类的占用内存的问题1空类的问题class CBase { }; sizeof(CBase)=1;原始的C结构
2017-03-13 19:48:24
1034
1
原创 法曲率、主曲率、平均曲率和高斯曲率
平均曲率、主曲率和高斯曲率是曲率的三个基本要素。法曲率:曲面在一点沿着不同方向的弯曲程度不同。或者说曲面离开切平面的速度不同。这个弯曲属性可以用这一点的沿着这个方法的法曲率刻画主曲率:过曲面上某个点上具有无穷个正交曲率,其中存在一条曲线使得该曲线的曲率为极大,这个曲率为极大值Kmax,垂直于极大曲率面的曲率为极小值Kmin。这两个曲率属性为主曲率。他们代表着法曲率的极值。平
2017-03-13 19:30:34
28037
原创 虚函数与多态实现的机制分析
一、基类对象、派生类对象相互访问的规则没有虚函数时的规则A:基类能够被派生类对象赋值,只是取了派生类的基类部分进项初始化,B: 派生类不能被基类对象赋值,因为这样有一部分不能被初始化C: 基类的对象被派生类对象赋值,但是基类对象仍只能访问自己的函数D:基类的指针被派生类对象地址赋值,但是基类对象仍只能访问自己的函数E:建立一个基类的引用,但是赋予派生类对象,其实此引用只
2017-03-11 21:19:30
684
原创 动态规划问题
一、简单的动态规划1)兔子问题2)青蛙跳台阶3)青蛙变态跳台阶4)1*2的长方形填满n*1的长方形问题上述几个问题都是一样的,都属于斐波那契额数列问题二、最长上升或下降子序列
2017-03-08 17:03:44
1296
原创 二维数组的各种sizeof问题
#include#include#includeint main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int n=sizeof(a[0][0]); printf("a=0x%x,*a=0x%x\n",a,*a); printf("a size=%d,*a siz
2017-03-01 10:57:08
2352
原创 网格生产的常用算法
1 网格生成的常用算法:这里所谓的网格生产算法是:有限元网格生产算法,即对对象实体进行网格划分,而我们要进行的是此处的逆工程,需要根据点云重建三角网格,,然后恢复处曲面信息网格生成算法可以分为两类:结构化网格和非结构化网格 结构化网格:单元结点之间的连接方式只有有限
2017-02-16 17:08:53
11697
原创 一维数组、二维数组、字符数组的&、sizeof等操作
一 前提知识1、sizeof是一个运算符,sizeof(a)计算的是a这种变量类型或结构体所占的字节数2、变量名一旦进行了移位操作,那么他就退化成了指针3、数组名和对数组名取地址的值是一样的,但是含义不一样4、数组名和指针的区别 指针是一个变量,变量的值是另外一个变量的地址。那么,既然指针是变量,那么指针必然有自己的存储空间,只不过是该存储空间内的值是一个地址值,而不
2017-02-16 11:10:56
2093
原创 关于数学上特殊数(如质数、素数)的笔试题
1 计算N以内的素数注意:代码部分参考了http://www.cnblogs.com/ladd/archive/2011/05/18/2562100.html和http://blog.csdn.net/haoni123321/article/details/7930827前提知识:素数又称为质数,指的是只能被1或本身整除的数; 任何合数肯
2017-01-13 10:55:48
466
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人