03 2009 档案
摘要: “ 算了,今天就到这里吧。我们明天再运用递归的思想解决这个小朋友吃苹果的问题,顺便再讨论一些对算法的效率进行评估的方法……这些都是基础,如果不了解这些就去盲目的学习C++语言、面向对象编程和类库什么的,对你有害无益……因为你的思想就会局限在一个比较低的水平上。”
“是吗是吗?”小P不解,“会吗?”
“的确是这样。”老C回答,“我们学习的是编程,而不仅仅学习的是语言。我们希望通过对语言的学习提高的是编程的能力……这样你在以后的工作中,无论使用什么语言,都会飞快的上手,同时分析问题和解决问题的能力也会有显得众不同……要深入进去,这就是为什么说teach yourself programming in ten years的原因……这10年中,你学习的如果仅仅是语言的话,那么等10年后,你会发现,自己原来没有10年的编程经验,有的只是10个1年编程经验……”
阅读全文
摘要: “其实就是和一般的待定系数法的思想是一样的,给出一个我们已经知道的特解——这个解一般都是比较容易看出来或者推导出来的——将这个特解代入原方程,并化简,可以得到一个关于系数的方程;再猜测一个特解,代入原方程,化简后又得到一个关于系数的方程……如果我们得到待定系数个数的方程——比如我们待定3 个系数——我们可以通过3个特解得到3个关于这3个系数的方程,若这3个方程联立后可解,那么我们就可以通过方程组解得这3个系数。”老C擦擦唾沫。
阅读全文
摘要: “哦,这是一个习惯用法。一般的抽象类的析构函数要么是public virtual的,要么是protected 非virtual的。我在这里将它设计为protected 非virtual是因为我不想让Iterator动态生成,就是说不希望Iterator的继承类的对象是在堆上创建的。”看到小P还是有些莫名其妙,老 C接着说,“关于这个小技巧,我会在后面一段时间……一个月后吧……跟一些其他的小技巧一起总结一下,在这里你就先将就着看吧。”
“也好……”小P槑。
“接下来的代码……很傻很天真……”老C解释道,“因为在这里只是说明问题而已,你可不要学习这种设计啊。”
阅读全文
摘要: “哦,叫我想想。”小P眨眨眼睛,“好像和遍历这些数据结构花费的时间有关系,如果我遍历一遍这些数据结构的所有元素所花费的时间是元素个数的线性函数,那么这个数据结构就是线性表,哦……时间复杂度就是n啦。”小P又想想,“好像就是这样,我所接触的线性表包括array, linked list, stack, queues,而queues可能有各种奇怪的queue,比如循环的,优先级的什么的……”
“你的记忆力不错啊。”老C称赞道,“嗯,基本上线性表就是这么回事啦。”他点点头,“我再来问一个貌似题外话的问题,你知道在C语言中,有哪4类指针吗?”
“槑……”小P摇头,飞快。
“在C语言中,有4种指针,分别是一般的指针,空指针、0指针和past the last one指针。”老C道。
“槑……”小P道,“一般的指针就是指向数据和函数的指针吧,空指针应当就是void*,0指针应当就是无法dereference的那种指针,那么什么是past the last one指针?”他不解的问。
“很简单,我
阅读全文