代码改变世界

随笔档案-2013年05月

C 语言实现 C++ 多态

2013-05-09 17:57 by 捣乱小子, 1988 阅读, 收藏, 编辑
摘要: C 还是 C++?C++ 中的多态是指「通过基类对象的指针或者基类对象的引用调用虚函数」,表现更多派生类的特性,但根据 C++ 多态的实现,我们发现这种方法存在一定的空间和效率的折损。不可否认,多态轻松解决了很多工程中遇到的问题,这与 pure C 的解决方法比起来,更为优雅。在考虑移植性上,C 的光芒要盖过 C++,但 C++ 的多态是可借鉴的,于是用 pure C 来模仿 C++ 中多态行为。C 如何实现多态在 C 中没有类的概念,但有 struct,而且 C 中的 struct 是不允许有函数的,只允许存在变量,那是不是函数变量就允许存在了?!所以,函数指针可以给我们一些提示。假定有一个 阅读全文

面试题:把负数移动到正数之前,不能改变正负数原先的次序

2013-05-03 14:58 by 捣乱小子, 2586 阅读, 收藏, 编辑
摘要: 如:-5,7,1,9,-12,15 变成 -5,-12,7,1,9,15。如何解?题目要求:空间复杂度O(1),时间复杂度O(N),排序稳定。空间上只能利用循环变量,标记变量等;时间上可以说是过一遍数组就完事了。分治用分治可以解决问题:首先把规模为 N 的问题划分成两个规模近似为 N/2 的子问题,两个子问题得到解决后进行合并得到整个问题的答案。对于本篇的问题,主要考虑合并该怎么解决,也就是假设:将数组 arr 分成 arr1 和 arr2。设 arr1 为 [----++++],arr2 为 [------+++],如何得到 arr 为 [----------+++++++]。显然,只要将 阅读全文