04 2012 档案

编程痛并快乐着
摘要:《人月神话》中提到编程这个职业时,列出编程给人带来乐趣的理由,同时也谈到这个职业也给人很多苦恼,下面是这篇文章的观点,觉得写的不错:快乐:编程的乐趣是一种创建事物的纯粹快乐。快乐来自于开发对其他人有用的东西。编程的过程体现了魔术般的力量。学习新事物的乐趣,源于工作的非重复特性。还来自于工作在如此易于驾驭的介质上。总之,编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。痛苦:必须追求完美。由其他人来设定目标,供给资源,提供信息。寻找琐碎的BUG却是重复性的工作。当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时。我的体会:每当我仅仅用 阅读全文

posted @ 2012-04-26 20:54 hazir 阅读(1838) 评论(5) 推荐(2) 编辑

大学总结之影响我最深的十本书
摘要:今天是“世界读书日”,前几天微博上转发非常多的一条微博:“一日不读书,无人看得出;一周不读书,开始会爆粗;一月不读书,智商输给猪”,确实阅读是很重要的,对此我深有体会。大学四年我读了大量的书,其中大多是计算机技术方面的书,可以说从这些书中我打牢了我专业的基础,是我大学最大收获之一。 今晚回头翻看了一下图书馆的借书历史记录,我自己也被吓到了,到目前为止竟然借了339本之多,主要是在大二和大三借阅的。这也从侧面反映我那时处于迷茫期,每当去图书馆看了什么书说的一门技术我觉得挺新的,管他三七二十一就给借过来了,大多数也只是翻了翻就给还回去了。当然也有几本书是认认真真地看了一遍又一遍,而这些书对我... 阅读全文

posted @ 2012-04-23 22:36 hazir 阅读(9466) 评论(55) 推荐(11) 编辑

20. 协助完成“返回值优化(RVO)”
摘要:[19]最后曾提到了在函数通过传值方式(by value)返回一个对象时,不可避免地要生成一个临时对象,这会严重影响到程序的效率,如下例计算两个分式的乘积:class CRational{public: CRational(int numerator, int denominator) { this->numerator = numerator; this->denominator = denominator; } int numer() const //get numerator { return nume... 阅读全文

posted @ 2012-04-19 11:50 hazir 阅读(1852) 评论(0) 推荐(1) 编辑

19. 了解临时对象的来源
摘要:什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象.通常出现在以下两种情况:(1)为了使函数调用成功而进行隐式类型转换的时候。 传递某对象给一个函数,而其类型与函数的形参类型不同时,如果可以通过隐式转化的话可以使函数调用成功,那么此时会通过构造函数生成一个临时对象,当函数返回时临时对象即自动销毁。如下例://计算字符ch在字符串str中出现的次数int countChar (const string& str, char ch);char buffer[];char c;//调用上面的函数countChar (buffe 阅读全文

posted @ 2012-04-18 23:09 hazir 阅读(3306) 评论(2) 推荐(1) 编辑

16. 谨记80-20法则
摘要:80-20 法则一个程序 80% 的资源用于20% 的代码身上。这里的资源包括:执行时间、内存消耗、磁盘访问、维护成本.....这说明了:软件的整体性能几乎总是由其构成要素(代码)的一小部分决定。也给我们指明了提升软件性能的一个方向:我们只要找到这20%的代码,并进行相应的优化,那么我们程序的运行速度就可以有较大的提高。而怎样找到这20%的代码,有两种不同的方法:根据程序员的直觉和经验“猜”出影响软件性能提高的瓶颈代码。但往往大部分程序员对于程序的性能特质,都有错误的直觉,因为程序的性能特质倾向高度的非直觉性。举个例子,我们当然可以采用某些特选的算法和数据结构加入程序之中,将运算量最小化,但如 阅读全文

posted @ 2012-04-17 14:33 hazir 阅读(627) 评论(1) 推荐(1) 编辑

7. 千万不要重载&& ,|| 和,操作符
摘要:C/C++语言对于逻辑表达式具有“逻辑短路”的性质,即一旦确定了真假值,表达式中即使有尚未检查的部分,都将返回。如:char *p;if ((p != NULL) && printf("%c", *p)) ... //(1) int rangeCheck(int index){ if ((index < lowerBound) || (index > upperBound)) ... //(2) ...}(1)中你不用担心p为NULL时,调用printf函数会出现错误,因为一旦p为NULL逻辑与的检测将返回FASLE,无需计算后面... 阅读全文

posted @ 2012-04-16 17:38 hazir 阅读(2064) 评论(1) 推荐(1) 编辑

6. 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
摘要:C++中允许++ 和-- 操作符的前置和后置两种形式具有重载的能力。而重载是以参数类型来区分的,然而不论是++ 还是 -- 的前置或后置均没有参数,为了区分这两种不同的操作,只好让后置式有一个int自变量,并且在它调用的时候,编译器默认给该int指定一个0值。下面的例子是使char型也能进行++ 和 -- 的运算:class Char{public: Char(char); Char& operator++ (); //前置式++ const Char operator++ (int); //后置式++ Char& ope... 阅读全文

posted @ 2012-04-16 16:27 hazir 阅读(3129) 评论(4) 推荐(2) 编辑

5. 对定制的“类型转换函数”保持警觉
摘要:C++中允许编译器在不同类型中执行隐式转化,例如默默地将char转化为int,将short转化为double等等,这些是语言提供的。现在当你写自己的类型时,你可以选择是否提供某些函数,供编译器用作隐式类型转化之用。如定义一个类类型,是否允许其它类型转化为此类类型,我们可以操控的。可以通过两种函数允许编译器执行这样的隐式转化:单自变量constructor 和隐式类型转化操作符。单自变量constructor :指的是以单一自变量成功调用的constructor,这样的constructor可能只有一个单一参数,也可能有多个参数,而其他参数都有默认值。如下面两个例子:class CName{ . 阅读全文

posted @ 2012-04-15 19:38 hazir 阅读(459) 评论(0) 推荐(0) 编辑

8. 了解各种不同意义的new 和 delete
摘要:C++中关于new 的形态主要有三种:new operator, operator new, placement new三者的用法有着不同,注意区别适用的条件:new operator:new 操作符,和C++语言其它操作符(如+, -, ->, ::....)一样,是由语言内建的,总是完成相同的事情,程序员不能改变其意义。如下为new的一种用法:string *ps = new string("hazirguo");它主要完成的任务包括三个方面:分配足够的内存,用来放置某类型对象。上例中分配足够放置一个string对象的内存。调用一个constructor,为分配的 阅读全文

posted @ 2012-04-15 14:15 hazir 阅读(473) 评论(0) 推荐(2) 编辑

2. 最好使用C++转型操作符
摘要:旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷,表现在以下两方面:不能更精确地指明其转型的意图。如将一个pointer-to-base-class-object 转型为一个pointer-to-derived-class-object(改变一个对象的类型)和将一个pointer-to-const-object转型为一个pointer-to-non-const-object(改变对象的常量性),在旧式C语法中并不区分。难以辨识。旧式C转型方式的语法为(type)expression,由一对小括号加上一个对象名称组成,而这种语法结构在C++的任何地方都有可能使用,这就无法 阅读全文

posted @ 2012-04-14 17:58 hazir 阅读(1342) 评论(1) 推荐(2) 编辑

1.仔细区别pointers 和 references
摘要:没有所谓的null reference: 若有一个变量有可能代表一个对象,也可能不代表任何对象,应该使用pointer; 如果这个变量必须代表一个对象,即不允许这个变量为null,则应该使用reference。 因此,reference必须要有初始化,但pointer就没有此限制(不过,无初始化的pointer风险很高)。string &rs; // error! not initialstring s("hazirguo");string &rs = s; // right! rs refere to spointers可以被重新赋值指向另一个对象,ref 阅读全文

posted @ 2012-04-14 16:42 hazir 阅读(459) 评论(0) 推荐(0) 编辑

那些年,我们一起听过的讲座
摘要:2012年4月11日,听到科大“复兴论坛”这次请来了柳传志,很是激动,决定一定要去听一下,虽然我没有门票,这意味着我得很早去科大在外面排队等着进去。 下午5点在工大吃了晚饭,和田田、张宁一起坐公交过去的,大概5:30到了科大东区,在校园里逛了一下,发现科大那条道上也有好多樱花树,拍了张照片留念: 找到了论坛举办的报告厅,人还不多,没票的已经有二十多个在排着队了,我们也在后面排起来。人越来越多,到了七点,外面排队的焦躁了,由于人多,后面的人更急,怕进不去,纷纷往前涌,科大的保安很敬业,为了保持秩序,分别和一位老师、一位同学发生了冲突。 这次的报告厅不大,只能容纳五六百人,过道也很窄,没票也只能. 阅读全文

posted @ 2012-04-12 08:39 hazir 阅读(428) 评论(0) 推荐(0) 编辑

深入探索C语言之结构体(struct)
摘要:结构(struct)就是一种把一些数据项组合在一起的数据结构,其他语言把它称做为记录(record)。语法为将需要组合的内容放在花括号中,前面加上一个关键字struct,如下:struct{内容...};1.怎样定义结构体变量:举个具体的例子,如将在校学生的信息定义为一个结构体,信息内容包括学生的姓名(string)、学号(long)、年龄(int)等,就可以声明如下:struct { char sName[10]; long sNo; int sAge; };结构体本质是一种数据类型,和C语言的内置内型(char,int,long...)类似,我们可以用它来定义变量,如定义一个学生Ja... 阅读全文

posted @ 2012-04-11 15:34 hazir 阅读(972) 评论(0) 推荐(0) 编辑

2012年中科大考研复试离散数学、编译原理试题(完整版)
摘要:离散数学1.(4分)求与下述公式逻辑等值的前束合取范式:2.(8分)对于命题公式P、Q、R,证明以下等值关系:3.(8分)(1)定义集合S={1,2,3,4,5}上的二元关系R1={<i,j>|j=i或j=i/2},R2={<i,j>|i<j},求合成关系R2R1和R1R2.(2)写出R2的关系图和关系矩阵,并指出其是否自反、反自反、对称、反对称、传递?4.(8分)设<G,*>是群,H是G的非空子集。证明:若任给a,b∈H,都满足a*b-1∈H,则<H,*>是<G,*>的子群。5.(6分)证明:图G连通,每个结点的度数均为偶数, 阅读全文

posted @ 2012-04-04 16:53 hazir 阅读(1047) 评论(0) 推荐(0) 编辑

2012年中科大考研上机机试试题(回忆版)
摘要:本次机试两个半小时,共5题。1.字符串处理:从string.in文件里读入两个字符串,字符串除了数字还可能包括'—'、'E'、'e'、'.',相加之后输出到文件string.out中,如果是浮点型,要求用科学计数法表示(最多包含10个有效数字)。SampleInput:SampleOutput:34.56 2.7956e22.45e22.最大公约数:从number.in文件中读入n个数,求出这n个数的最小值、最大值以及它们两的最大公约数,输出到文件number.out中。number.in中第一行为n,接下来为n个大于零的整数。S 阅读全文

posted @ 2012-04-01 20:16 hazir 阅读(1064) 评论(0) 推荐(0) 编辑

一个代码可以创造一个世界,也可以毁灭一个世界!

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