摘要:1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应。free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。网易面试题:new/delete和malloc/free的区别new/delete:给定数据类型,new/delete会自动计算内存大小,并进行分配或释放。如果是对类进行操作,new/ 阅读全文
转 C语言面试题大汇总
2013-09-06 14:44 by youxin, 664 阅读, 0 推荐, 收藏,
摘要:转 C语言面试题大汇总,个人觉得还是比较全地!!!\主 题: C语言面试题大汇总,个人觉得还是比较全地!!!作 者: free131 (白日?做梦!)信 誉 值: 100最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。发布之前先申明两点: 1 所有资料来自网络(主要是CSDN),本人只是收集和转发。 2 所有问题解答(尤其是代码)只是参考,不保证正确。先发基本问题,再发编程问题.......... 回复人: free131(白日?做梦!) ( ) 信誉:100 2006-4-17 10:0.. 阅读全文
编程珠玑-位图
2013-09-06 00:54 by youxin, 1841 阅读, 0 推荐, 收藏,
摘要:1. 概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。 2. 位图实现 在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。 C语言版本: 改编自编程珠玑:http://netlib.bell-labs.com/ 阅读全文
c++ 静态多态与动态多态
2013-09-05 23:28 by youxin, 1634 阅读, 0 推荐, 收藏,
摘要:多态polymorphism是指具有多种形态的情况,它能根据单一的标记关联不同的行为。多态是面向对象程序设计的基础。在面向对象程序设计中的多态是一种运行时的多态。C++中有两种多态,称为动多态(运行时多态)和静多态(编译时多态),而静多态主要通过模板来实现,宏也是实现静多态的一种途径。其实在做软件设计时静多态的威力也是非常强大的,只不过我们经常对它疏忽了而已。 动多态的设计思想:对于相关的对象类型,确定它们之间的一个共同功能集,然后在基类中,把这些共同的功能声明为多个公共的虚函数接口。各个子类重写这些虚函数,以完成具体的功能。客户端的代码(操作函数)通过指向基类的引用或指针来操作这些对象,对. 阅读全文
C++的类型萃取技术
2013-09-05 23:13 by youxin, 862 阅读, 0 推荐, 收藏,
摘要:应该说,迭代器就是一种智能指针,因此,它也就拥有了一般指针的所有特点——能够对其进行*和->操作。但是在遍历容器的时候,不可避免的要对遍历的容器内部有所了解,所以,设计一个迭代器也就自然而然的变成了数据结构开发者的一个义务,而这些iterators的表现都是一样的,这种内外的差异,对用户来说,是完全透明的,第一部分 为什么要有萃取技术既然是一种智能指针,iterator也要对一个原生指针进行封装,而问题就源于此,当我们需要这个原生指针所指对象的类型的时候(例如声明变量),怎么办呢?Case1对于函数的局部变量这种情况我们可以采用模版的参数推导,例如:template void func( 阅读全文
STL 全特化/偏特化
2013-09-05 22:28 by youxin, 837 阅读, 0 推荐, 收藏,
摘要:templateclass Compare{public: static bool isEqual(const T& lh,const T& rh) { return lh==rh; }}; 这是一个用于比较的类模板,里面可以有多种用于比较的函数, 以IsEqual为例。一、特化为绝对类型 也就是说直接为某个特定类型做特化,这是我们最常见的一种特化方式, 如特化为float, double等templateclass Compare{public: static bool isEqual(const float &lh,const float& rh) ... 阅读全文
侯捷C++ Type traits(类型萃取
2013-09-05 21:53 by youxin, 2599 阅读, 0 推荐, 收藏,
摘要:泛型編程編出來的代碼,適用於任何「吻合某種條件限制」的資料型別。這已成為撰寫可復用代碼時的一個重要選擇。然而,總有一些時候,泛型不夠好 — 有時候是因為不同的型別差距過大,難以產生一致的泛化實作版本。這個時候 traits(品质,特性意思) 技術就變得相當重要。這種技術可以將那些需要被納入考量的型別性質以一種 type by type 的原則,封裝於一個 traits class 內,於是可以將「由於型別之間的差異,必須撰寫出來以備用」的代碼體積降至最低,並使泛用代碼的體積提昇到最高。考慮一個例子:當我們處理字元字串(character strings)時,常見的一個操作行為就是決定「以 nu 阅读全文
stl 迭代子的失效
2013-09-05 16:43 by youxin, 558 阅读, 0 推荐, 收藏,
摘要:迭代子是STL中很重要的特性,但是其很脆弱(我个人认为),因为使用它的条件很苛刻,一不小心就失效了。其在两中情况下可能会失效。1.当容器有插入操作时在初始化了迭代子后,如果容器有插入操作时,迭代子可能失效。#include #include using namespace std;void main(){vector vecobj(10,5);vector::iterator iter=vecobj.begin();vecobj.insert(iter,6);for(;iter!=vecobj.end();iter++){cout#include using namespace std;int 阅读全文
算法导论练习6.5-8 k路合并
2013-09-05 16:30 by youxin, 730 阅读, 0 推荐, 收藏,
摘要:题目:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并。 看到题目第个想到的是归并排序过程中的归并操作子过程,从头开始两两比较,找出最小的,然后接着往后比较,常用的是2路归并。而题目给的是k个已排好序的链表(k>=2)。如果没有提示,我半天不知道如何去实现,幸好提示说用最小堆来做k路合并,于是我想到可以这样做:创建一个大小为k的数组,将k个链表中的第一个元素依次存放到数组中,然后将数组调整为最小堆,这样保证数组的第一个元素是最小的,假设为min,将min从最小堆取出并存放到最终结果的链表中,此 阅读全文
编程之美:编程判断两个链表是否相交
2013-09-05 13:56 by youxin, 3815 阅读, 1 推荐, 收藏,
摘要:编程判断2个链表是否相交(假设2个链表均不带环)解法二:利用计数的方法,如果我们能够判断2个链表中是否存在地址一致的节点,就可以知道这2个链表是否相交。一个简单的做法是对第一个链表的节点地址进行hash排序,建立hash表,然后针对第二个链表的每个节点的地址查询hash表,如果在hash表中出现,那么说明有共同的节点,时间复杂度为O(L1+L2),但是同时要附加O(L1)的存储空间。解法3:转化为另一已知问题由于2个链表都没有环,我们可以把第二个链表接在第一个链表后面,如果得到的链表有环,则说明2个链表相交。这样,我们就把问题转换为判断一个链表是否有环。那么“两个无环单向链表”画出来只可能是2 阅读全文
浙公网安备 33010602011771号