11 2012 档案

 
C++与多态
摘要:什么是多态?我偶尔也谈多态,而且以为我了解多态,但真要细说起来,还真是说不清楚,搜集了网上的一些介绍,巩固一下知识吧:多态的一个广泛认可的定义是 “一种将不同的特殊行为和单个泛化记号相关联的能力”,一个符号可以表达不同的行为,想想C++中有哪些feature是跟这个能力相关的:1. 继承+虚函数:父类指针可以指向子类对象,调用虚函数时,执行子类对象的重载版本,从而实现一个symbol,却产生不同的行为;2. 重载(overloading), 运算符重载:除了我们经常使用的=,<等运算符,我们还可以重载函数调用运算符,从而支持函数对象;3. 重写(override):方法的名字是一样的,不 阅读全文
posted @ 2012-11-27 16:56 做个不善的人 阅读(143) 评论(0) 推荐(0) 编辑
算法面试题解答(四)
摘要:1. 求两个字符串的最大公共字符串#include<iostream>usingnamespacestd;voidgetLength(constchar*src1,constchar*src2,int*l1,int*l2){if(src1==NULL||src2==NULL||strlen(src1)==0||strlen(src2)==0){*l1=0;*l2=0;return;}intpl1=0,pl2=0;inttpl1=0,tpl2=0;inttpl3=0,tpl4=0;if(src1[0]==src2[0]){getLength(src1+1,src2+1,&tp 阅读全文
posted @ 2012-11-26 15:35 做个不善的人 阅读(319) 评论(0) 推荐(0) 编辑
算法面试题解答(三)
摘要:1. 按螺旋方式打印矩阵: Print in spiral form as shown belowFor n=23 20 1For n=34 3 25 0 16 7 8For n=415 14 13 124 3 2 115 0 1 106 7 8 9 一看到这个题目应该比较容易想到递归,不过这个递归里面有些细节需要特别注意,代码如下: #include <iostream>#include <math.h>usingnamespace std;struct Position{ Position(int _x, int _y) { x = _x; y = _y;} int 阅读全文
posted @ 2012-11-25 13:07 做个不善的人 阅读(282) 评论(0) 推荐(0) 编辑
计算机基础知识问答
摘要:线程和进程的区别和联系(What's the difference between process and thread? What kind of information does thread maintain? its own stack? heap?How and when to do a context switch? How do you handle an time slice i... 阅读全文
posted @ 2012-11-25 11:30 做个不善的人 阅读(205) 评论(0) 推荐(0) 编辑
算法面试题解答(二)
摘要:在面试中,我们经常被问到Coding的问题,要求用伪码或者某种语言解决一个问题,由于平时我们都依赖IDE来debug找错,所以很容易写出有错误的程序,而且没有调试,导致有些错误极难被发现,下面列举一些常见错误,并以三个题目的实践作为例子告诉自己:错误很容易发生!!!请注意验证自己的程序。边界条件:循环变量的起始点、结束点和增减是否正确;递归调用的结束条件;对于输入,是否考虑可能很大或者很小的情况,比如,对某个序列进行rotate,这个次数如果是特别大,至少打过序列长度,这种情况考虑了吗;空间边界,内存、字符串、数组的大小对吗,是否存在差1和越界情况数据结构边界,链表的头和尾正确处理了吗,指针指 阅读全文
posted @ 2012-11-18 11:47 做个不善的人 阅读(458) 评论(0) 推荐(0) 编辑
算法面试题解答(一)
摘要:1. 在一个数组中找出出现次数超过n/2的元素 第一次看到这个题目是在《编程之美》上,书上给的算法是,每次从数组中删除两个不一样的元素,那最后剩下的就是出现次数超过n/2的元素,但是这种很直观的办法要么就是破坏原来的数组,要么将原数组复制一份,这样都不好,有没有空间需求是O(0),而且不破坏原数组的方法呢? 下面就是这样的一种方法,用一个计数器统计出现次数,如果发现一个跟现在保存的值不一样的,就将其减一,如果计数变成0,那么就需要更新这个值,其思想跟之前的类似,但是它的空间需求是O(0)的。下面是代码: staticvoid Main(string[] args) { int[] list . 阅读全文
posted @ 2012-11-13 14:15 做个不善的人 阅读(598) 评论(0) 推荐(0) 编辑
理解smart pointer之二:如何实现一个smart pointer
摘要:大家都用过smart pointer,但是如果要自己实现一个,有哪些函数需要实现呢,下面是auto_ptr的实现代码,我加了几行注释,帮助理解,同时列举哪些函数需要实现:1. explicit版的构造函数;2. 类型转换操作符,可以使auto_ptr到auto_ptr的赋值;3. Copy构造函数;4. pointer-to-member 操作符(* and –>);5. 析构函数;templateclass auto_ptr{ // wrap an object pointer to ensure destructionpublic: typedef auto_ptr _Myt; ty 阅读全文
posted @ 2012-11-12 15:38 做个不善的人 阅读(1091) 评论(0) 推荐(0) 编辑
STL的容器中存储对象和指针的利和弊
摘要:STL的容器中既可以存储对象,也可以存储指针,这里分析一下利弊,和使用时的注意事项。 STL容器的工作方式: 1. 对基本数据类型,位拷贝; 2. 对自定义的类类型对象,调用Copy构造函数,复制一份; 因此如果存放对象,对象会被复制,在容器中的对象并不是原来的对象了,进出都需要拷贝,代价很大; 如果存放指针,指针会被复制,对象不会复制,但是存放指针容易造成内存泄漏,原因是,如果某个方法new了... 阅读全文
posted @ 2012-11-11 11:56 做个不善的人 阅读(2249) 评论(0) 推荐(0) 编辑
经典计算机基础数据结构:图
摘要:1. 图的表示大家都知道图有两种标准的表示方法:邻接表或者邻接矩阵。可是它们分别有什么样的好处呢?答案是:邻接表适合稀疏图,而邻接矩阵时候稠密图;要确定图中边(u,v)是否存在,只能在定点u的邻接表中搜索v,效率不高,而这时邻接矩阵就要方便的多了;理论上知道了邻接表和邻接矩阵,如何用代码来实现呢?#include <stdlib.h>#include <queue>using namespace std;#define MAX_VERTEX_NUM 20typedef enum _VisitedColor{ Black, White, Grey}VisitedColor 阅读全文
posted @ 2012-11-11 11:03 做个不善的人 阅读(2122) 评论(0) 推荐(0) 编辑
(zz)Why Memory Barrier
摘要:原文:http://sstompkins.wordpress.com/2011/04/12/why-memory-barrier%EF%BC%9F/ 要了解如何使用memory barrier,最好的方法是明白它为什么存在。CPU硬件设计为了提高指令的执行速度,增设了两个缓冲区(store buffer, invalidate queue)。这个两个缓冲区可以避免CPU在某些情况下进行不必要的等待... 阅读全文
posted @ 2012-11-07 16:14 做个不善的人 阅读(4012) 评论(1) 推荐(0) 编辑
求数组的子数组之和的最大值
摘要:问题描述:一个有N个整数元素的一维数组(A[0],A[1],...A(n-1),它包含很多子数组,求子数组之和的最大值,当数组元素全部为负的时候,有两种处理办法,第一种是返回0,第二种是返回数组中最大的负数。 阅读全文
posted @ 2012-11-05 19:30 做个不善的人 阅读(205) 评论(0) 推荐(0) 编辑
Effective C++ 精要(第八部分:定制new和delete)
摘要:条款49:了解new-handler的行为 条款50:了解new和delete的合理替换时机 条款51:编写new和delete时需固守常规 条款52:写了placement new也要写placement delete 阅读全文
posted @ 2012-11-05 14:27 做个不善的人 阅读(184) 评论(0) 推荐(0) 编辑
Effective C++ 精要(第七部分:模板与泛型编程)
摘要:条款41:了解隐式接口和编译期多态 条款42:了解typename的双重意义 条款43:学习处理模板化基类内的名称 条款44:将与参数无关的代码抽离templates 条款45:运用成员函数模板接受所有兼容类型 条款46:需要类型转换时请为模板定义非成员函数 条款47:请使用traits classes表现类型信息 条款48:认识template元编程 阅读全文
posted @ 2012-11-05 14:25 做个不善的人 阅读(180) 评论(0) 推荐(0) 编辑
Effective C++ 精要(第六部分:继承与面向对象设计)
摘要:条款32:确定你的public继承塑模出is-a关系 条款33:避免遮掩继承而来的名称 name hiding其实是和作用域有关的话题, 但是它在继承体系中有些更微妙的东西。我们知道在一个函数中如果有个local 变量x,同时函数外还有个变量x,那在这个函数中看到的x是函数内的local变量x。也就是local变量hide了全局变量,这个是C语言中的name hiding。下面看继承时的情况,其实... 阅读全文
posted @ 2012-11-05 14:24 做个不善的人 阅读(254) 评论(0) 推荐(0) 编辑
Effective C++ 精要(第五部分:实现)
摘要:条款26:尽可能延后变量定义式的出现时间 条款27:尽量少做转型动作 条款28:避免返回Handles指向对象内部成分 条款29:为“异常安全”而努力是值得的 条款30:透彻了解inlining的里里外外 条款31:将文件间的编译依存关系将至最低 阅读全文
posted @ 2012-11-05 14:22 做个不善的人 阅读(237) 评论(0) 推荐(0) 编辑
Effective C++ 精要(第四部分:设计与声明)
摘要:条款18:让接口容易被正确使用,不易被误用 考虑我们要设计一个Date类,其构造函数接受年月日三个参数,我们是否应该用int来表示这三个参数呢?可以,但不够好,因为月日的顺序往往不同的国家有不同的习惯,如果是int很容易会被误用,好一点的办法是定义不同的struct来表达月、日和年,这样用户就没那么容易误用接口了。这这里,月和日的取值是有范围的,如果我们让类型能够反应这种范围,那用户就更不容易犯错... 阅读全文
posted @ 2012-11-05 13:38 做个不善的人 阅读(200) 评论(0) 推荐(0) 编辑
Effective C++ 精要(第三部分:资源管理)
摘要:条款13:以对象管理资源 在一个函数中,获取若干资源后,会对这些资源进行若干操作,正确的设计要求我们在函数返回时将资源释放。但是,如果在我们释放资源之前,因为异常或者过早返回导致临时资源没有被释放,就会造成资源泄漏,即使非常小心的添加delete语句,仍然无法避免某个异常发生在delete之前而造成资源泄漏。更可靠的方式是把资源放到对象中,而局部对象会在离开控制区后,C++会自动回收这个临时对象,... 阅读全文
posted @ 2012-11-03 15:23 做个不善的人 阅读(297) 评论(0) 推荐(0) 编辑

 

点击右上角即可分享
微信分享提示