2013年3月12日

摘要: 归并排序(递归)void MergeSort(int *A, int n){ if(n == 1){ return ; } int *C = new int[n]; int l1 = n/2; int l2 = n-l1; MergeSort(A, l1); MergeSort(&A[l1], l2); for(int i = 0, j = l1, k = 0; k < n;){ while(i!=l1 && j != n){ if(A[i]<A[j]){ C[k] = A[i]; k++; i++; }else{ ... 阅读全文
posted @ 2013-03-12 15:50 碎雨 阅读(153) 评论(0) 推荐(0)
摘要: 1.插入排序void InsertSort(int *A, int n){// A is a int point point to a int Array and n is the length of the Array for(int j = 1; j < n; j++) { int key = A[j]; int i = j - 1; while(key < A[i] && i >=0 ) { A[i+1] = A[i]; i = i-1; } A[i+1] = key; } return ;}2.冒泡排序void Bub... 阅读全文
posted @ 2013-03-12 15:42 碎雨 阅读(193) 评论(0) 推荐(0)

2012年10月30日

摘要: ...这一章主要讨论三个著名的C++语言扩充性质,它们分别是:template,exception和runtime type identification.7.1 template: 有关template的三个主要讨论方向: 1)template的声明,基本上来说就是当你声明一个template class,template class member function等等时,会发生什么事. 2)如何具现出class object以及inline nonmember,以及member template functions,这些是"每一个编译单位都会拥有一份实体"的东西. 3) 阅读全文
posted @ 2012-10-30 12:26 碎雨 阅读(308) 评论(0) 推荐(0)
摘要: 6.1 对象的构造和解构: 如果一个区段(以{}括起来的区域)或是函数中有一个以上的离开点,情况会混乱一些,因为destructor必须放在每一个离开点(当object还活着时)之前,同样,goto语句也可能需要许多个destructor调用操作,一般而言,我们会把object尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生和摧毁操作....全局对象:例如有如下程序片段:Matrix identity;main(){ Matrix mi=identity; //... //... return 0;} C++保证,一定会在main()函数中第一次用到identity之前,把 阅读全文
posted @ 2012-10-30 12:23 碎雨 阅读(385) 评论(0) 推荐(0)

2012年10月23日

摘要: ...引子:每一个derived class destructor会被编译器扩展,以静态调用的方式调用其"每一个virtual base class"以及"上一层base class的destructor",因此,只要缺乏任何一个base class destructor的定义,就会导致链接的失败,并且,比较好的设计模式是,不要把virtual destructor声明为pure. 一般而言,把所有的成员函数声明为virtual function,然后在靠编译器的优化操作把不必要的额外virtual invocation去处,不是一个好的设计理念. 关于 阅读全文
posted @ 2012-10-23 22:33 碎雨 阅读(341) 评论(0) 推荐(0)

2012年8月26日

摘要: 4.1 Member 的各种调用方式:1)nonstatic member function:...C++的设计准则之一就是:nonstatic member function至少必须和一般的农member function 有相同的效率. 实际上member function被内化为nonmember的形式.过程如下: a)改写函数的signature(函数的原型)以安插一个额外的参数到member function中,用以提供一个存取管道,使class object得以调用该函数,该额外的参数就是this指针. b)将每一个"对nonstatic data member" 阅读全文
posted @ 2012-08-26 18:58 碎雨 阅读(510) 评论(0) 推荐(0)

2012年6月15日

摘要: 在用MFC ActiveX开发控件时,将一个对话框添加到工程,然后在这个对话框上开发控件需要的应用,能更好的利用MFC带来的方便....具体步骤如下:1)建立一个基于MFC的ActiveX工程;2)在工程的资源视图中,添加一个新的对话框,并且将对话框的样式设置为,style:child,border:none,visible;3)为这个对话框添加一个类,类型为CMyDlg;4)为Ctrl类添加一个成员变量 CMyDlg m_dlg;并且添加OnCreate消息响应函数,在函数中添加如下代码:int Ctest123Ctrl::OnCreate(LPCREATESTRUCT lpCreateSt 阅读全文
posted @ 2012-06-15 13:37 碎雨 阅读(3241) 评论(1) 推荐(0)

2012年5月19日

摘要: Data语意学...引子: C++对象模型尽量以空间优化和存取速度考虑来表现nonstatic data members,并且和C语言struct保持数据配置的兼容性,它把nonstatic data members 直接存放在每一个class object之中,对于继承而来的nonstatic data members(无论是virtual或是nonvirtual base class)也是如此,不过并没有强制定义其空间排列顺序,至于static data members,则被放置在程序的一个global data segment中,不会影响个别的objects的大小,static data 阅读全文
posted @ 2012-05-19 15:21 碎雨 阅读(430) 评论(0) 推荐(0)

2012年4月23日

摘要: 构造函数2.1 default constructor的构建操作:...default constructor会在,当编译器需要它的时候,被合成出来例如:对于class X,如果没有任何user-declared constructor,那么会有一个default constructor被暗中(implicitly)声明出来,...一个被暗中声明出来的default constructor 可能是一个trivial(没啥用的)constructor,nontrivial constructor就是编译器需要的那一种....对于nontrival default constructor有下列四种 阅读全文
posted @ 2012-04-23 15:00 碎雨 阅读(520) 评论(0) 推荐(0)
摘要: 关于对象...引子:在C语言中,"数据"和"处理数据的操作(函数)"是分开来声明的,语言本身并没有支持"数据和函数"之间关联性,这种程序成为"程序性的",由一组"分布在各个一功能为向导的函数中"的算法驱动,他们处理的是共同的外部数据....C++在布局以及存取时间上的主要额外负担是有virtual引起的,包括: 1)virtual function 机制,用以实现一个有效率的"执行期绑定" 2)virtual base class 用以实现"多次出现在继承体系中的 阅读全文
posted @ 2012-04-23 14:59 碎雨 阅读(1310) 评论(0) 推荐(0)

导航