摘要:如果你已经从另外一种语言如C#或者Java转向了C++,你会觉得,避免在类的构造函数或者析构函数中调用虚函数这一原则有点违背直觉。但是在C++中,违反这个原则会给你带来难以预料的后果和无尽的烦恼。 正文 我想以重复本文的主题开篇:不要在类的构造或者析构函数中调用虚函数,因为这种调用不会如你所愿,即使成功一点,最后还会使你沮丧不已。如果你以前是一个Java或者C#程序员,请密切注意本节的内容-这正是C++与其它语言的大区别之一。 假设你有一个为股票交易建模的类层次结构,例如买单,卖单,等等。为该类交易建立审计系统是非常重要的,这样的话,每当创建一个交易对象,在审计登录项上就生成一个适当的... 阅读全文
程序员面试题精选100题(32)-不能被继承的类
2013-10-03 02:04 by youxin, 467 阅读, 0 推荐, 收藏,
摘要:题目:用C++设计一个不能被继承的类。分析:这是Adobe公司2007年校园招聘的最新笔试题。这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字,要实现这个要求还是需要花... 阅读全文
面试题之数组统计
2013-10-03 01:26 by youxin, 720 阅读, 0 推荐, 收藏,
摘要:题目:给定数组A,大小为n,数组元素为0到n-1的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。要求在O(n)的时间复杂度,O(1)的空间复杂度下完成。问题的难点在于时间和空间复杂度。O(1)的空间含义,可以使用变量,但不能开辟数组或者map等来计数。解法一:直接用两层遍历,O(n^2)的时间复杂度,O(1)的空间复杂度。效率太低.#include #include int main(){ int n, i, j, count = 0; //n is The length of the Array while ... 阅读全文
面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
2013-10-02 23:49 by youxin, 20277 阅读, 2 推荐, 收藏,
摘要:题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一... 阅读全文
数组Magic Index
2013-10-02 23:02 by youxin, 853 阅读, 0 推荐, 收藏,
摘要:QuestionA magic index in an array A[1...n-1] is defined to be an index such that A[i] = i. Given a sorted array of distinct integers, write a method to find a magic index, if one exists, in array A. FOLLOW UP What if the values are not distinct?给定一个数组A,其中有一个位置被称为Magic Index,含义是:如果i是Magic Index,则A[i] 阅读全文
链表查找问题总结
2013-10-02 22:13 by youxin, 500 阅读, 0 推荐, 收藏,
摘要:问题1:找到链表中倒数第 k 个元素。由于链表无法得知其长度,一般的想法是首先遍历一遍得到长度len,然后再从头走len-k;就得到了倒数第k个元素。效率太慢。有一种比较好的方法。设2个指针pFirst,pSecond,首先让pFirst走k步。让两个指针有 k 步的遍历步距差值,这样当第一个指针指向最后时,第二个指针正好指向倒数第 k 个。其实遍历的次数和算法一相同。网上有一些文章误认为这种方式更高效,其实没有太本质的变化,只有常数的变化。具体来说,就是先让 ptrFirst 遍历了 k 个节点后,两个指针再开始一起遍历节点。问题2:找到链表的中间元素。与问题1类似,让pFirst以两部速度 阅读全文
部分有序中查找给定值-【百度面试题】循环有序数组的查找问题
2013-10-02 17:09 by youxin, 1831 阅读, 0 推荐, 收藏,
摘要:问题:有一个循环有序数组A,如{7,8,9,0,1,2,3,4,5,6},不知道其最小值的位置。那么如何从这样的数组中寻找一个特定的元素呢?(循环有序满足以下条件之一:1.数组所有元素相等2.数组是个有序数列,这时候分界点就是第一个元素的位置3.总能找到一个位置(也是只有唯一一个位置)从那个位置开始,左边是个递增序列,右边也是一个有序序列,且最后一个元素小于或者等于第一个元素。(也就是首尾相连为 有序的)。)问题分析:我们可以把循环有序数组分为左右两部分(以mid = (low+high)/ 2为界),由循环有序数组的特点知,左右两部分必有一部分是有序的,我们可以找出有序的这部分,然后看所查找 阅读全文
为何要将整型变量强制转化为指针
2013-10-02 15:30 by youxin, 4929 阅读, 0 推荐, 收藏,
摘要:为何要将整型变量强制转化为指针这个标题包含二层含义:1、整型变量能强制转化为指针吗?例如下面的形式:DWORD ia=10;LPVOID lp = (LPVOID) ia;我们在程序中测试一下吧#include #include using namespace std;void main(){DWORD ia =10;//定义了一个整形变量LPVOID lp =(LPVOID)ia;//强制转化成指针cout #include using namespace std;void main(){DWORD ia =10;//定义了一个整形变量LPVOID lp =(LPVOID) &ia; 阅读全文
洗牌算法汇总
2013-10-01 17:01 by youxin, 1301 阅读, 0 推荐, 收藏,
摘要:编程珠玑提到将一个数组随机重新洗牌,目的即打乱原有的排列。洗牌算法有以下几种.Fisher and Yates' original method该算法最初是1938年由Ronald A. Fisher和Frank Yates在《Statistical tables for biological, a... 阅读全文
如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true
2013-10-01 14:56 by youxin, 1134 阅读, 0 推荐, 收藏,
摘要:下面这篇文章是从StackOverflow来的。LZ面试的时候遇到了一道面试题:“如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true”,于是LZ做了下面的这样的程序:boolean atLeastTwo(boolean a, boolean b, boolean c) { ... 阅读全文
浙公网安备 33010602011771号