项目中的有趣题目 -- 吃饺子问题 题目描述:近日,项目中偶遇一个有趣的题目,感慨多多,备忘之。抽象出来,大致是:桌上一共有100个饺子,其中有10个饺子包了硬币,问:连续吃到硬币的期望次数是多少次?首先,定义一下这里的连续,如果我们将吃饺子的顺序抽象为一个100位的二进制数。并且吃到饺子表示为1,没吃到则为0,那么:如果一次和第二次吃到,那么可表示为: 110.....,那么这里的连续吃到的次数为1.如果数
C++的拖延战术:lazy evaluation 在C++中这里的拖延战术拥有一个非常优雅的名字 -- Lazy evalution。一旦你的程序中使用了lazy evaluation,那么你就可以在你实际需要某些动作时编写相应的代码,如果不需要,那么相应的动作也就永远都不会执行。那么我们在什么时候会用的上这样的技术呢?Reference Counting 引用计数对于引用技术,相信大部分人都不觉得陌生,在C++中的智能指
Python 之 @property 在阅读廖雪峰的Python的笔记时,读到了@property特性,发现略有不足,由于自己是初学,希望惠及更多的初学者吧。@property 的用途是什么呢?下面一步一步地介绍。定义类Student,拥有变量名name和score1234class Student(object): def __init__(self,name,score):
Python之OO 面向对象 Python之面向对象在C++和Python中,都有面向对象的概念,但是两者有哪些重要的区别呢?用最简单的语言便是,C++把每一个用户(这里当然值的是使用代码的程序员)当做是潜在的可能的犯罪分子,可以提供给你的部分已经规定好了,不可逾越。Python则是个比较柔和的管理方式,它认为所有的用户都具有高度的自觉性,用户可以很自自觉的使用代码。更加生动的比喻见这里类与对象
C++ 之 over-eager evaluation 超前评估 C++之超急评估over-eager evaluation vs. eager evaluation vs. lazy evaluation在前面已经提到了C++地懒惰求值:不要为你程序功能之外的任何事情付出任何代价。在你总是需要执行某种计算,但是该计算地结果并不总是被用到地时候,lazy evaluation 绝对可以提高你的程序的性能。但是当计算的结果总是被需要的时候,
Python 之 decorator装饰器 最近看到 廖雪峰 的Python教程,对于学习Python的人来说,这可谓是一大福音,没有冗长的废话,只有最通俗易懂的语言,以及最清晰的解读。下面是我对 装饰器 这一小节的总结, 以及自己的理解。很多时候我会把Python的很多语法与C++相融合,在C++中,函数的名称即为函数的地址,我们可以通过定义"函数指针"变量,并且讲函数名称赋值给该变量,那么我们在调用函数的时候,就可以直接使用
【提高C++性能的编程技术】读书笔记2 -- 跟踪实例 这里所说的跟踪指的是跟踪程序的运行过程。这里讨论跟踪,旨在如何利用高效的跟踪的代码,使得跟踪尽可能不增加源程序的额外开销。这里的跟踪其实很直观,就是顺着程序运行的轨迹,怎样打印出程序的每一个阶段的运行状态的log信息。因此,如何跟踪代码便是一个核心的问题。不当的跟踪方式会导致运行开销的增大。因此怎样设计出高效的跟踪技术是我们学习怎样写出高效的C++代码的一个很好的突破口。鉴于C++
【提高C++性能的编程技术】读书笔记1 -- 导言 【纸上得来终觉浅】最近开始看这本书,站在巨人的肩膀上,希望有更大的收获!!一个程序的执行效率是取决于改程序翻译成汇编语言之后的执行的机器指令的条数。而每一个机器指令的执行的周期是一定的。C语言和C++都是高于汇编语言的高级语言,其中,C语言源代码与其相应的机器指不是完全同一的,但是大致是线性的,但是C++语言的源代码与编译代码的开销变化很大的。一条C++指令可能对应于3条汇
Validate binary search tree 关于这道题目,不得不感慨leetcode真的是一个不错的网站,之前的代码是有bug的,当时AC了,现在测试用例更加完善了,于是不能AC了。题目描述:Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The le
C++ 之 exception 本文讲关于C++的异常的所有东西:绝对不让异常逃离析构函数阻止exception逃离析构函数,主要是两个原因:1 防止在异常处理过程中的栈展开行为时,将调用terminate函数。程序将会结束,有时候其实错误并没有那么严重。[插入: 什么时候会调用terminate函数呢?][回答 : By default, the terminate handler call
关于移位的有意思的小问题 首先,直接上题目:根据X得到F和G,其中X、F、G均是有符号的32位整型数,其中F = X/2; G = X>>1; 发现 F != G,下面的说法哪个是正确的:A 编译错误 B X是奇数 C X是负数 D F-G=1上述4个选项中,首先排除A和B,显然随便举个反例就有了。对于C,这里就涉及到负数在计算机中的表示形式了,至于怎么个表示法,下面一一道来:对于负数,在计
C++函数调用之静态成员函数 首先,定义如下类A:class A{private: static int val_s;public: static int getVal(){cout << "call getVal in A..." << endl;return val_s;}};我们可以看到,上述类的定义中包含静态成员变量val_s 和静态成员函数getVal() ,对于静态的成员变量,一般
C++之类的成员函数的调用 vs. 普通函数的调用 首先请看下面的语句:Point3d obj;Point3d *ptr = &obj;当使用上述指针或者对象调用成员函数Func()时,会有:obj.Func();ptr->Func();上述调用的背后到底完成了一些什么呢?假设Func函数的定义如下:Point3d Point3d::Func() const{Float a = getA();
[算法]区间重合判断 题目描述:给定一个源区间 [x,y]和N个无序的目标区间[x1,y1],[x2,y2],...[xn,y,],判断给定的源区间[x,y]在不在目标区间内。例如:给定源区间[1 6]和目标区间[1 2][2 4][4 9]即可认为区间[1 6]在目标区间内,因为源区间的并集为[1 9 ].试想一下,现在在这样的一个目标区间的集合, 需要频繁地去查询一个区间是否在该集合中。那么怎么样才
C++11之 unique_ptr 原文地址为:http://www.drdobbs.com/cpp/c11-uniqueptr/240002708在C++11中加入了很多的新特性,unique_ptr一枝独秀,对于动态分配的内存对象,它简单有效。虽然它不是万能的,但是它做的已经够好了:利用简单的语法便可以管理动态分配的对象。基本语法:unique_ptr 是一个模板类,你可以很简单地构造一个unique_ptr
没有默认构造函数,如何定义对象数组 如果一个类没有定义默认构造函数,那么构造该类的对象数组将会是一个问题。于是实现了一个将new操作符掰开了来用的代码。首先分配内存,然后再在分配的内存上调用构造函数构造对象,下面的代码做一个简单的备忘。//没有定义构造函数的类不能定义该类的对象数组,内置类型除外//operator new + ctor//dtor + operator delete //operator new[]
算法之 有序链表和平衡二叉树 有序数组与平衡二叉树 题目描述:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.给定一个有序的链表,要求构建一颗平衡二叉查找树。解析:二叉查找树的中序遍历的结构就是一颗二叉查找树,要使得最终的二叉查找树的结构尽可能的平衡,也就是说只需要