上一页 1 ··· 55 56 57 58 59 60 61 62 63 ··· 69 下一页
摘要: 尾递归 - Tail Recursion尾递归是针对传统的递归算法而言的, 传统的递归算法在很多时候被视为洪水猛兽。 它的名声狼籍, 好像永远和低效联系在一起.尾递归就是从最后开始计算, 每递归一次就算出相应的结果, 也就是说, 函数调用出现在调用者函数的尾部, 因为是尾部, 所以根本没有必要去保存任何局部变量. 直接让被调用的函数返回时越过调用者, 返回到调用者的调用者去.以n!为例介绍,后面例子n=5.代码线性递归int Rescuvie(int n){ return(n == 1) ? 1 : n * Rescuvie(n - 1); } 尾递归int T... 阅读全文
posted @ 2013-08-14 11:32 jihite 阅读(1813) 评论(0) 推荐(2)
摘要: 2013年技术类《linux鸟哥的私房菜》2th Edition《c++ primer》 4th Edition《高质量c++/c编程指南》 v1.0《Tkinter教程》非技术类《数学之美》 吴军《公平中国》 王福重 阅读全文
posted @ 2013-08-09 16:57 jihite 阅读(539) 评论(0) 推荐(1)
摘要: 重载相同的范围(在同一个类中)函数名相同参数不同virtual关键字可有可无重载与继承、隐藏很好区分,因为重载函数在同一个类中举例说明#include using namespace std;class Base{ public: void f(int x) {cout #include using namespace std;class base{ public: virtual void test(int a, int b) { cout #include using namespace std;class base{ public: ... 阅读全文
posted @ 2013-08-09 16:42 jihite 阅读(871) 评论(0) 推荐(0)
摘要: malloc/free是c++/c的标准库函数,new/delete 是c++的运算符。两者都可以申请动态内存和释放内存。对于非内部数据类型的对象而言,光用malloc/free是无法满足动态对象的要求的。对象在创建时需要自动调用构造函数,在消亡时需要调用析构函数。由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能把自动执行构造函数和析构函数的任务强加给malloc/free。举例说明:#include #include using namespace std;class A{ public: A(void); ~A(void);}... 阅读全文
posted @ 2013-08-09 11:50 jihite 阅读(519) 评论(0) 推荐(0)
摘要: 使用free或delete之后,只是把指针所指的内容给释放掉,但是指针并没有被干掉,还是指向原来位置(并不是执行NULL),此时指针指向的内容为垃圾,被称为“野指针”。举例说明几个重要容易迷糊的特征:1. 指针消亡了,并不表示他所指向的内存会被自动释放。例:void func(coid){ char *p = (char *)malloc(sizeof(char) * 100);}当函数执行完时,指针变量因为存在于栈上,会自动消亡。但是这不意味着分配的空间也会自动释放,原因是:动态非配的空间位于堆(动态内存分配区),必须自己去释放;否则,调用一次函数,造成一次内存泄露。2. 内存被释放了,.. 阅读全文
posted @ 2013-08-09 11:03 jihite 阅读(6480) 评论(0) 推荐(1)
摘要: 参数策略如果函数的参数是一个指针,不要指望用该指针去动态申请内存。如下:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); //str仍未NULL strcpy(str, "hello"); //运行错误}原因是编译器总是为每个参数制作临时副本。指针参数p, 其副本为_p,使_p=p。如果改变了_p所指的内容,相应的p所指的内容也跟着改变(毕竟指向同样... 阅读全文
posted @ 2013-08-08 21:51 jihite 阅读(7637) 评论(6) 推荐(5)
摘要: 内容复制与比较数组char a[] = "hello";char b[10];strcpy(b, a); //复制,不可以b = aif (strcmp(b, a) == 0); //比较,不可以 if (b == a)指针int len = strlen(a);char *p = (char *) malloc(sizeof(char)*(len+1)) 动态分配存储空间,不可以空穴来风,直接拷贝东西strcpy(p, a); //复制,不可以p = aif (strcmp(p, a) == 0); //比较,不可以 if (p == a) 阅读全文
posted @ 2013-08-08 20:33 jihite 阅读(479) 评论(0) 推荐(0)
摘要: 构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即:A(void) //默认无参数构造函数A(const A &a) //默认复制构造函数~A(void); //默认的析构函数A & operator = (const A &a); //默认的赋值函数既然能自动生成函数,为什么还需要自定义?原因之一是“默认的复制构造函数”和"默认的赋值函数“均采用”位拷贝“而非”值拷贝“位拷贝 v 阅读全文
posted @ 2013-08-08 15:57 jihite 阅读(21919) 评论(6) 推荐(7)
摘要: const成员变量 举个例子 说明 在类中声明变量为const类型,但是不可以初始化 const常量的初始化必须在构造函数初始化列表中初始化,而不可以在构造函数函数体内初始化 但是 此时的const变量属于具体的一个对象,如何在整个类中都恒定不变呢? 答案是利用枚举,举例 枚举常量不会占据对象的存储 阅读全文
posted @ 2013-08-08 00:53 jihite 阅读(24444) 评论(6) 推荐(3)
摘要: 1. 尽可能在定义变量的同时初始化该变量(就近原则)——防止忘记初始化,引用未被初始化的变量,可能导致程序错误2. 代码行最大长度宜控制在70~80个字符以内(长行拆分)——否则眼睛看不过来,也不便于打印。例如:virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix, CMatrix rightMatrix);3. 命名规则变量名字:名词 or 形容词+名词。例如:int value, oldValue;全局函数名字:动词 or 动词+名词。例如:DrawBox();类的成员函数名... 阅读全文
posted @ 2013-08-07 23:12 jihite 阅读(603) 评论(0) 推荐(0)
上一页 1 ··· 55 56 57 58 59 60 61 62 63 ··· 69 下一页