摘要: 13.6 基类的析构函数为何要声明为virtual?解答:用对象指针来调用一个函数,有以下两种情况:如果是虚函数,会调用派生类中的版本。如果是非虚函数,会调用指针所指类型的实现版本。析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构... 阅读全文
posted @ 2014-12-09 23:10 Jessica程序猿 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目C++中名字隐藏是什么?解答让我们通过一个例子来讲解C++中的名字隐藏。在C++中,如果一个类里有一个重载的方法, 你用另一个类去继承它并重写(覆盖)那个方法。你必须重写所有的重载方法, 否则未被重写的方法会因为名字相同而被隐藏,从而使它在派生类中不可见。请看例子:class FirstClas... 阅读全文
posted @ 2014-12-09 22:47 Jessica程序猿 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 13.5谈谈C语言关键字”volatile”的意义(或重要性)?解答关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能被外界修改。操作系统、硬件或其他线程都可能修改该变量。该变量的值由可能遭受意料之外的修改,因此,每一次使用时,编译器都会重新从内存中获取这个值。v... 阅读全文
posted @ 2014-12-09 22:36 Jessica程序猿 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 13.4深拷贝和浅拷贝有什么区别,如何使用?解答浅拷贝并不复制数据,只复制指向数据的指针,因此是多个指针指向同一份数据。 深拷贝会复制原始数据,每个指针指向一份独立的数据。通过下面的代码, 可以清楚地看出它们的区别:struct Test{ char *ptr;};void shallow_c... 阅读全文
posted @ 2014-12-09 22:25 Jessica程序猿 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 13.3C++中的虚函数是如何工作的?解答虚函数依赖虚函数表进行工作。如果一个类中,有函数被关键词virtual进行修饰, 那么一个虚函数表就会被构建起来保存这个类中虚函数的地址。同时, 编译器会为这个类添加一个隐藏指针指向虚函数表。如果在派生类中没有重写虚函数, 那么,派生类中虚表存储的是父类虚函... 阅读全文
posted @ 2014-12-09 22:19 Jessica程序猿 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 13.2浅析哈希表和STL map。对比哈希表和STL map。哈希表是怎么实现的?如果输入数据规模不大, 我们可以使用什么数据结构来代替哈希表。解答对比哈希表和STL map在哈希表中,实值的存储位置由其键值对应的哈希函数值决定。因此, 存储在哈希表中的值是无序的。在哈希表中插入元素和查找元素的时... 阅读全文
posted @ 2014-12-09 22:15 Jessica程序猿 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 13.1 用C++写个方法,打印输出文件的最后K行。解答:一种方法是打开文件两次,第一次计算文件的行数N,第二次打开文件,跳过N-K行, 然后开始输出。如果文件很大,这种方法的时间开销会非常大。我们希望可以只打开文件一次,就可以输出文件中的最后k行。 我们可以开一个大小为k的字符串数组,然后将文件中... 阅读全文
posted @ 2014-12-09 21:52 Jessica程序猿 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 11.7 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。处于实际和美观的考虑,在上面的人要比下面的人矮一点、轻一点。已知马戏团每个人的高度和重量,请编写代码计算叠罗汉最多能叠几个人。如果要保持相对顺序不变,那么不能直接排序。C++实现代码:#include#includeusing... 阅读全文
posted @ 2014-12-09 20:40 Jessica程序猿 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 11.6 给定M*N矩阵,每一行、每一列都按升序排序,请编写代码找出某元素。类似leetcode:Search a 2D Matrix但是与leetcode中这题不同的是下一行的第一个元素不一定大于上一行的最后一个元素。所以使用二分查找有点麻烦。解法一:通过观察我们可知:若列的开头大于x,那么x位于... 阅读全文
posted @ 2014-12-09 17:17 Jessica程序猿 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 11.5 有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置。解法:如果没有那些空字符串,就可以直接使用二分查找法。比较待查找字符串str和数组的中间元素,然后继续搜索下去。针对数组中散布一些空字符串的情形,我们可以对二分查找法稍作修改,所需的修改就是mid进行比较的... 阅读全文
posted @ 2014-12-09 16:17 Jessica程序猿 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 11.4 设想你有一个20GB的文件,每一行一个字符串。请说明将如何对这个文件进行排序。解法:当面试官给出20GB大小的限制时,实际上在暗示些什么。就此题而言,这表明他们不希望你将数据全部载入内存。该怎么办呢?做法是只将部分数据载入内存。我们将整个文件划分为许多块,每个块xMB,其中x是可用的内存大... 阅读全文
posted @ 2014-12-09 15:51 Jessica程序猿 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 11.3 给定一个排序后的数组,包含n个整数,但这个数组已被旋转很多次,次数不详。请编写代码找出数组中的某个元素。可以假定数组元素原先是按从小到大的顺序排序的。解法:可以直接从开始一个一个比较,也可以采用二分查找的方法。在经典二分查找中,我们会将x与中间元素进行比较,以确定x属于左半部分还是右半部分... 阅读全文
posted @ 2014-12-09 15:46 Jessica程序猿 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 11.2 编写一个方法,对字符串数组进行排序,将所有变位词1排在相邻的位置。类似leetcode:Anagrams解法:变位词:由变换某个词或短语的字母顺序构成的新的词或短语。例如,“triangle”是“integral”的变位词。此题有个要求,对数组中的字符串进行分组,将变位词排在一起。注意,除... 阅读全文
posted @ 2014-12-09 13:49 Jessica程序猿 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 11.1 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B。编写一个方法,将B合并入A并排序。解法:已知数组A末端有足够的缓冲,不需要再分配额外空间。程序的处理逻辑很简单,就是逐一比较A和B中的元素,并顺序插入数组,直至耗尽A和B中的所有元素。这么做的唯一问题是,如果将元素插入数组A的... 阅读全文
posted @ 2014-12-09 13:04 Jessica程序猿 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 9.11 给定一个布尔表达式,由0、1、&、|和^等符号组成,以及一个想要的布尔结果result,实现一个函数,算出有几种括号的放法可使该表达式得出result值。解法:跟其他递归问题一样,此题的关键在于找出问题与子问题之间的关系。假设函数int f(expression,result)会返回所有值... 阅读全文
posted @ 2014-12-09 11:06 Jessica程序猿 阅读(301) 评论(0) 推荐(0) 编辑