打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C/C++ 经典问题2
20. 如果我们的一个软件产品,用户回复说:运行速度很慢,你怎么处理? 

询问其Workflow, 用户的硬件环境

21. 八皇后问题,详述解法 (八皇后问题说的是在8*8国际象棋棋盘上,要求在每一行放置一个皇后,且能做到在竖方向,斜方向都没有冲突)

回溯法

22. kmp快速匹配算法 ---不算轻松的搞定 

普通的模式匹配算法,一旦不匹配,模式串右移一位;但是其实根据一直条件,我们可以算出应该向右移几位以避免不必要的比较;算法实现比较曲折

23. 无向图中两点间最短路问题 ---伟大的迪杰克斯拉算法 

假设一共有N个节点, 需要一个一维数组Previous[N]来记录前一个节点序号;一个一维数组TotalLength[N]来记录从原点到当前节点最短路径;一个二维数组Weights[N][N]来记录各点之间边的权重(如果存在), 然后从源点到终点进行深度搜索或广度搜索, 按以下规则:搜索到某个节点b时,假设其前一个节点为a, 把TotalLength[a] + Weights[a][b]与TotalLength[b]相比较,如果小于TotalLength[b], 则TotalLength[b] = TotalLength[a] + Weights[a][b], Previous[b] = a; 反之则不做任何操作。这样到搜索结束后, 从Previous[N]数组中就能得到整条最短路径了

24. 空间中任意给两个向量,求角平分线 

先单位化, 假设单位化后结果为nv1, nv2, 则角平分线为(nv1+nv2) / 2

25. 什么是平衡树 

左右子树都是平衡树,且高度相差不超过1的有序二叉树

26. 哈夫曼编码问题 

理论基础:霍夫曼树是带权路径长度(WPL:Weighted Path Length)最小的二叉树,它不一定是完全二叉树,应该是权值大的外结点离根节点最近的扩充二叉树。霍夫曼编码是为了实现数据的最小冗余编码,是数据压缩学的基础。 它根据字符在电文中出现的频率为权值,构造霍夫曼树,左为0, 右为1. 其有两个效果,一是保证电文有最短的编码,二是字符间不需要分隔符,因为不同的字符必定有不同的开头(成为前缀编码)。

27. 有向图求环 

以该节点为源点与终点吗进行深度优先或广度优先搜索

28. .给n个点,求凸包问题 

凸包(convex hull)是指一个最小凸多边形,满足这N个点都在多边形上,或其内。算法描述:

求出最右的那个点作为凸多边形的一个顶点(P0),遍历其他所有点(Pi), 如果其他点都在向量P0Pi的同一侧,则Pi也为凸多边形的顶点。

29. 四则运算(给一个前缀表达式(波兰式)或后缀表达式(逆波兰式),然后求解;给一个中缀表达式) 

+*-CDBA -/EF---------------------> A+B*(C-D)-E/F 前缀-中缀 

操作符进栈,一个变量tmp放上一个中间操作数(运算结果),遇到操作数检查tmp是否为空, 空的话取两个操作数,不空的话取一个操作数,另一个就是tmp了,操作符出栈运算,结果放入tmp中,如果是操作符,tmp清空

 ABCD-*+EF/- ---------------------> A+B*(C-D)-E/F 后缀-中缀

操作数进栈,遇到操作符,两个操作数出栈,计算结果入栈

30. STL中container有哪些? 

序列容器: vector, list, deque, bitset

关联容器: set, multiset, map, multimap

适配容器:stack, queue, priority_queue

类容器: string, valarray, bitset

扩展容器:hash_set, hash_multiset, hash_map, hash_multimap

31. map中的数据存储方式是什么? 

红黑树, 是一种平衡二叉搜索树, 具有良好的最坏情况运行时间(统计性能好与AVL树)

32. map和hashmap有什么区别? 

内部数据结构不同, map是红黑树,hashmap是哈希表

33. hashmap是标准库中的吗? 

不是的,但在SGI stl与vc2005中都提供了。

34. vector中的erase方法跟algorithm的remove有什么区别? 

vector中erase是真正删除了元素, 迭代器访问不到了。 algorithm中的remove只是简单的把要remove的元素移到了容器最后面,迭代器还是可以访问到的。因为algorithm通过迭代器操作,不知道容器的内部结构,所以无法做到真正删除。

35. object是什么?

具有内部状态,以及操作的 软件构造,用来表示真实存在(物理上或概念上)的对象

36. C++中如何阻止一个类被实例化? 

纯虚函数;构造函数私有化(友元)

37. 一般在什么时候构造函数被声明成private呢?

 singleton模式; 阻止某些操作(如阻止拷贝构造)

38. 什么时候编译器会生成默认的copy constructor呢?

用户没有自定义copy constructor;在代码中使用到了copy constructor;

39. 如果你已经写了一个构造函数,编译器还会生成copy constructor吗? 

如果我写的是copy constructor, 不会

如果我写的不是copy constructor, 同38

40. 为什么说如果一个类作为基类,则它的析构函数要声明成virtual的? 

因为,如果delete一个基类的指针时, 如果它指向的是一个子类的对象,那么析构函数不为虚就会导致无法调用子类析构函数,从而导致资源泄露。 当然,另一种做法是将基类析构函数设为protected.

41. inline的函数和#define有什么区别?什么时候会真的被inline,什么时候不会呢? 

1) 宏是在预编译阶段简单文本替代, inline在编译阶段实现展开

2)宏肯定会被替代,而复杂的inline函数不会被展开

3)宏容易出错(运算顺序),且难以被调试,inline不会

4)宏不是类型安全,而inline是类型安全的,会提供参数与返回值的类型检查

当出现以下情况时inline失败

函数size太大

inline虚函数

函数中存在循环或递归

函数调用其他inline函数

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【RT-Thread笔记】对象容器与双链表
Python 数据结构——解析树及树的遍历
javascript 六种数据类型(一)
Effective C++读书笔记
面试准备
C/C++拾遗(五):习惯C++——const与对象成员初始化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服