汇总一些困扰了很久的问题

来源:互联网 发布:椭圆机品牌 知乎 编辑:程序博客网 时间:2024/04/30 02:08


1.消除递归导致堆栈溢出

其实这个问题本来无法避免,因为你模拟调用过程,自己利用私有堆栈,也可硬转成非递归,但是大数据下肯定私有堆栈也会溢出。不过现在有了编译器优化就可以把“尾递归”转化成循环,那么……既然能直接转化成循环,你干嘛还要写成递归,直接写循环多好!编译器也只不过是把入参重新赋值,再goto到开头执行一遍,那么我们自己也可以啊。关键在于把普通递归转化成尾递归,一句话:增加参数,把本次递归产生的变量,传递给下次递归。


2.二叉树排序效率

    我们可以构造一个二叉树,左子树总是比右子树小,于是插入过程中就自动排序好了,那么如果数据插入顺序特别奇葩,比如根节点上就是最大,或者最小的值,那么这种排序就很坑爹了,怎么办呢?一句话:平衡二叉树,插入之后旋转调整一次。


3.vector的容量变化

插入之前:



插入之后:



后来找到MFC的源代码跟踪了一下:



看来很多时候,我们思想都是有“惰性”的,明明代码里面写的清楚,可是自己就懒得看,或许是“求知欲”已经不如学生时代了吧。


0 0
原创粉丝点击