摘要: 刚刚在洗澡的时候在想函数式编程的东西,函数式编程不是将函数看成一个对象,函数就是变量,它可以作为参数使用,它既可以作为左值来使用也可以作为右值来使用,函数式编程任何一个函数对于同一个输入,既在函数参数列表中的输入,不会产生多余两种不同的结果,为什么呢?因为函数式编程内部所有的变量不受外部的影响,也就是说,没有其他方法来改变我的内部状态,我的内部状态只有局部变量,没有全局变量,反正就是没有与其他函数共享的变量,所以函数式编程就像数据从函数的入口进入,从函数的出口出去,经过函数加工后,再流入其他的函数。函数式编程的思想在于递归,但是以前我一直没有理解,为什么是递归,我洗澡时候想了想,应该是因为,如 阅读全文
posted @ 2013-01-16 23:38 GOD_YCA 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 对于C/C++程序员来说,指针是天堂,同时指针也是地狱。指针有多少好处,又有多少让人头疼的问题我们这里就不多说了。但为了局部解决指针的问题,我们提出了智能指针这个概念。实际上,我一直不明白,智能指针用于干什么!直到我遇到有关栈和堆问题的时候,才依稀有了点感悟,我现在的感悟几乎肯定是不全面的,但是很重要。几乎有关指针的问题的出现集中在指针指向堆上空间的时候,为什么呢?如果指针指向的是栈上的空间,我们知道这里的空间是有系统自动管理的,申明释放都是由系统根据栈的策略来进行的。我们能够干预的部分很少。而对于指向堆空间的指针,由于申请(new),和释放(free)必须要程序员显示的进行调用,并且该空间的 阅读全文
posted @ 2013-01-16 22:12 GOD_YCA 阅读(1212) 评论(0) 推荐(0) 编辑
摘要: 以前写过一篇关于智能指针的文章,但是还是没有搞清楚两个东西:1。智能指针如何调用被智能指针指向的对象的成员函数,我不知道如何只通过智能指针去访问指向对象的成员方法,请看我的写的智能指针的demo。#include <iostream>using namespace std; class A{private: int n;public: A(int m):n(m) {} ~A(){ cout<<"~A() is called\n"; } int get() const{ cout<<"get() is called\n" 阅读全文
posted @ 2013-01-16 22:05 GOD_YCA 阅读(1834) 评论(2) 推荐(3) 编辑
摘要: 昨天晚上在看智能指针的时候,我发现自己连一个拷贝构造函数和赋值构造函数都写不出来,自己就尝试写了一个版本,结果发现错误百出,对于拷贝构造函数和赋值构造函数的理解仅仅停留在理论的方面,而不知其中太多的内涵。比如我们都知道拷贝构造函数和赋值构造函数最大的不同在于:拷贝构造是确确实实构造一个新的对象,并给新对象的私有成员赋上参数对象的私有成员的值,新构造的对象和参数对象地址是不一样的,所以如果该类中有一个私有成员是指向堆中某一块内存,如果仅仅对该私有成员进行浅拷贝,那么会出现多个指针指向堆中同一块内存,这是会出现问题,如果那块内存被释放了,就会出现其他指针指向一块被释放的内存,出现未定义的值的问题, 阅读全文
posted @ 2013-01-16 16:20 GOD_YCA 阅读(22542) 评论(3) 推荐(9) 编辑
摘要: 计算机就是数学的一个分支,不管你认不认同,你都会发现在编程的过程中,你能够发现很多的数学思维的闪现,就比如递归,递归可以让程序简化,与非递归比较,简单的递归函数省去了大段大段的代码,让人叹服不已,递归往往能体现设计者头脑的聪慧,但是递归的思想与数学又有什么相关呢?本文将介绍递归与数学归纳法之间的联系,希望给读者一些启迪。要说递归得先说,数学归纳法,想必每一个程序员在高中的时候就应该学习了数学归纳法,当我们需要去证明一个证明题时,很可能就要用到数学归纳法,数学归纳法的思想如下:一般地,证明一个与自然数n有关的命题P(n),有如下步骤:(1)证明当n取第一个值n0时命题成立。n0对于一般数列取值为 阅读全文
posted @ 2013-01-15 17:04 GOD_YCA 阅读(9963) 评论(2) 推荐(2) 编辑
摘要: 最近我发现360竟然做搜索了,我也尝试用了一下360的搜索,发现还是可以的,对于一些技术上的搜索,360还是挺给力的,360现在又和google合作,我感觉百度得有危机感了,虽然现在在搜索上仍旧是百度独大,但是假如中国有1亿人在用360的杀毒软件和安全卫士的话,那么至少有一半以下的人在用360的浏览器,360的浏览器必然将360的搜索放在搜索的首位,如果360在搜索上的技术和百度如果是一样好的,或者仅仅比百度差一点的话,那么必然造成百度的人员流失,这个很要命,关键现在google和360的合作,说不定google对360会有技术上的帮助,这个将对百度产生致命的打击。以前我们笑看3Q大战,我觉得 阅读全文
posted @ 2013-01-14 10:29 GOD_YCA 阅读(2076) 评论(9) 推荐(0) 编辑
摘要: 最近在学习C++,C++有用new和不用new来创建对象,但是两者是有区别的,用new的话,那就要程序员自己去分配和释放内存,因为对象存储在堆中,而不用new呢,对象存储在栈中,栈中的内存是由系统来管理的,不用程序员去释放,那么可以利用这一点,来达到一个目的,就是利用栈中对象随过程的消失而自动调用对象的析构函数释放对象,智能指针就是利用这个特新,如果我们将所有的动态分配的资源放在对象中,那么我们不就可以不用去关心内存是否真的释放了,不用去手动delete,这样就可以解决内存泄漏的问题。下面是写的智能指针的简化版: 1 #include <iostream> 2 3 using na 阅读全文
posted @ 2013-01-13 23:39 GOD_YCA 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 什么是lambda函数,中文名叫匿名函数?在你需要的时候采才去定义它,函数形式如下:lambda 参数列表 : 表达式lambda x,y:x*ylambda x: x*2但是这个不行 lambda x: x=x+2 不行,因为不是表达式函数式编程的思想,把所有的函数就当做对象一样看待,而lambda函数也一样,g = lambda x: x*2此时g就相当于函数def g(x): return x*2 那么lambda函数在那可以使用呢?如下一些小函数不需要重用,如果只用一次,而且这个函数可以用一个表达式来表示,那么就可以用lambda函数,当然你也可以不这么干。分割与合并字符串:join. 阅读全文
posted @ 2013-01-13 21:49 GOD_YCA 阅读(2178) 评论(1) 推荐(1) 编辑
摘要: 我们都知道频繁的动态内存分配很可能会造成大量的内存碎片和效率低下,因为需要搜索整个空闲链表找到可以被分配的内存块,而且容易造成内存泄漏等问题,那么如何解决这两个问题呢?内存池技术带你走进这个问题的殿堂。内存池技术首先会分配一大块内存给程序,当程序需要分配内存的时候从内存池中去获得,而且不需要去释放内存,当内存池不在用的时候释放整个内存即可,只分配,不释放,大大减少了时间。优势:1·效率快,无需调用malloc或者new,系统调用慢,而且搜索空闲块也慢2·不会产生过多的内存碎片,3·可以避免内存泄漏nginx=NXnginx的内存池设计非常巧妙得利用了HTTP短连接 阅读全文
posted @ 2013-01-13 20:54 GOD_YCA 阅读(1535) 评论(0) 推荐(0) 编辑
摘要: list加入新的变量:l.append(n)尾部加l.insert(2,n)在l[2]插入ntriple和list有什么区别:riple是静态的,不可更改,并有自动去重功能数据中有10000个数,其中某个数重复率打到50%以上,求快速找出这数的方法答案:10000个数分成两两一组,然后比较不相同去掉,相同的留下,如果一次不能得到结果,再做一次,最终会得到结果 阅读全文
posted @ 2013-01-13 14:14 GOD_YCA 阅读(290) 评论(0) 推荐(0) 编辑