上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
  2013年6月3日
摘要: C++中的转型语法有三种形式:1)C风格的转换:T(expression)(T)expression上面两种形式都是将expression转换为T类型。2)C++新型转换:a. const_cast(expression) 将对象的常量性转除,是唯一有此能力的C++风格转型操作符;b. dynamic_cast(expression) 主要用来执行“安全向下转型”,也就是觉得对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。c. reinterpret_cast(expression) 意图执行低级转型,实际动作可能取决于编译器,因此. 阅读全文
posted @ 2013-06-03 15:40 Sophia-呵呵小猪 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 如果你定义了一个变量而其类型带有一个构造函数和析构函数,那么当程序的程序流到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本,即使这个变量最终并未被使用,你仍需耗费这些成本,如下面的代码: 1 string encryptPwd(const string& pwd) 2 { 3 string encrypted; 4 if(pwd.length() < MinimumLength) 5 { 6 throw logic_error("Pwd is too short!"); 7 } 8 ... 阅读全文
posted @ 2013-06-03 12:28 Sophia-呵呵小猪 阅读(247) 评论(0) 推荐(0) 编辑
  2013年5月27日
摘要: 考虑下面的一段代码: 1 #ifndef RATIONAL_H 2 #define RATIONAL_H 3 #include<iostream> 4 using namespace std; 5 6 class Rational 7 { 8 public: 9 Rational(int nn = 1, int dd = 0)10 {11 n = nn;12 d = dd;13 }14 void print()15 {16 cout<<this->n<<" "<<this-d<<endl;17 }... 阅读全文
posted @ 2013-05-27 10:22 Sophia-呵呵小猪 阅读(273) 评论(0) 推荐(0) 编辑
  2013年5月23日
摘要: 命名空间是比class更大的一个结构,它的包裹也更加具有弹性,更加方便扩充。在命名空间中根据实际需求编写多个类或者头文件,并加入一些non-member non-friend函数来操作相关的类行为或数据,这样做有两方面的好处:1)不破坏封装性C++的封装结果是数据能够被很少的客户访问,封装性越大,可以访问数据的函数就应该越少,如果将操作数据的函数写成non-member non-friend可以完成相应的功能,那么就不要在类中添加成员函数来完成这些操作。2)减少编译相依可能会遇到这样的类:比如WebBrowser类,可能会与cookie相关,可能会与打印相关,可能会与书签相关,如果某个用户只需 阅读全文
posted @ 2013-05-23 16:37 Sophia-呵呵小猪 阅读(165) 评论(0) 推荐(0) 编辑
  2013年5月21日
摘要: 在C++类设计中,C++成员变量都应该设置为private,其理由如下:1)保持语法一致性如果所有的成员变量都是private,那么用户访问成员变量时都必须通过调用函数,保证了调用的一致性。如类对象a,它有一个成员函数GetName(), 它调用函数获取成员变量name的形式:a->GetName(),而如果直接将name声明为public,那么它的调用形式为:a->name。也即类对象调用成员函数和成员变量的形式是不一样的,造成了语法上的不一致性。2)可以对成员变量的处理有更精确的控制如果将成员变量设置为public,那么用户可以对其进行随意的读写操作,而如果用成员函数来控制,那 阅读全文
posted @ 2013-05-21 09:21 Sophia-呵呵小猪 阅读(1055) 评论(0) 推荐(0) 编辑
  2013年5月20日
摘要: 1)基本思想快速排序的基本思想是在数组中选择一个枢纽元素,然后分别从数组的开始和结束位置处开始遍历数组,将比枢纽元素小的都移到枢纽元素的左边,将比枢纽元素大的元素都移到它的右边,然后递归对枢纽元素前面的元素和后面的元素进行排序。即:这里的一个关键地方是如何选取枢纽元,有三种选择:a. 选取数组的第一个元素 这种策略就是比较懒惰的将得到的数组的第一个元素作为枢纽元,如果数组元素是随机排列的,这是可行的。但如果数组是预排序或反序的,那么这将造成数组几乎所有的元素都落在S1或者S2中,这样一来,最终的时间复杂度将达到O(N^2)。b. 利用随机数生成器产生随机枢纽元 一般来讲除非运气比较差会导致随机 阅读全文
posted @ 2013-05-20 13:04 Sophia-呵呵小猪 阅读(252) 评论(0) 推荐(0) 编辑
  2013年5月18日
摘要: 在之前的博客中有专门一章讲述在C++中为什么尽量在传参时用pass-by-reference取代pass-by-value,其主要目的是为了节省构造函数和析构函数的成本,但这不能完全的取代,假如有下面的一个类:1 class Rational2 {3 public:4 Rational(int numerator = 0, int denominator = 1);5 private:6 int n, d;7 };现在为此类添加成员函数operator*,不妨先找找以下的代码有什么问题:const Rational& operator*(Rati... 阅读全文
posted @ 2013-05-18 21:48 Sophia-呵呵小猪 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 1)基本思想归并排序的基本思想是将两个已经排好序的数组通过N-1次比较,归并到一个新的数组中,N是两个数组的元素个数之和。比如数组:24 13 26 1 2 27 38 15,归并的方法是分别对数组的前四个数据和后四个数据排序,然后合并这两个部分排序的结果,而对前四个数据和后四个数据排序的方法也是通过将其分别分为两个小数组,然后合并的方法,即递归实现,这就是所谓的分而治之的思想。2)算法实现每一次合并两个已排序的数组时,需要一个新的包含两个数组总大小的空间来放置排序的结果,由于是递归实现,如果在每一次递归的过程中,都分配一段临时空间然后在该次排序结束时释放掉,那么这个分配和释放将占用很多时间。 阅读全文
posted @ 2013-05-18 17:36 Sophia-呵呵小猪 阅读(180) 评论(0) 推荐(0) 编辑
  2013年5月17日
摘要: 1)基本思想堆排序的基本思想基于优先队列,对于一个无序数组,首先构造出最小堆,然后每一次删除顶点处最小的元素,这样依次删除就可以得到一个降序排列的数组。在此过程中,如将删除的元素依次赋给一个数组,那么最终得到的是一个增序排列的数组,但是需要额外的数组空间。为了减少空间消耗,可以利用堆删除元素之后并重新构造之后的最后一个位置来存放刚刚删除的元素,最终得到的是一个降序数组。为了得到增序排列的数组,可以将最小堆改为最大堆,即顶点处的元素是最大的,称为maxHeap.示例如下,首先删除顶点处元素97,并将最后一个元素移至顶点处,并重新构造最大堆:2)算法实现 1 #include "stda 阅读全文
posted @ 2013-05-17 11:13 Sophia-呵呵小猪 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 1)基本思想希尔排序是基于插入排序的,它首先是对一定间隔的元素进行插入排序,然后缩小间隔,再次进行插入排序,直到间隔为1,此时数组已经基本排好序,那么最后一次的插入排序将非常快。这个间隔也叫增量(increment),因而也叫缩小增量排序。如果增量序列为h1,h2,...ht, h1必须为1,最终的排序才算完成。对于增量hk(h1 0; inc/=2) 4 { 5 for(int i = inc; i 0; j -= inc)10 {11 if(A[j-inc] > temp)12 ... 阅读全文
posted @ 2013-05-17 10:14 Sophia-呵呵小猪 阅读(136) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页