自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 笔记:条款25: 考虑写出一个不抛出异常的swap函数

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。标准库std命名空间中 的swap定义如下:namespace std { template<typename T> void swap(T&a, T&b) { T temp(a); a = b; b = temp; }...

2018-07-20 00:13:19 370 2

原创 算法导论-01背包最优子结构与分数背包贪心选择性质证明

按照自己的理解写的

2020-09-09 22:19:44 2353

原创 算法导论-贪心算法 -活动选择问题补充

递归的方法://res为成员变量,注意s,f数组人为地在开头加一个0,调用参数(s,f,0,n)public void recuract(int[]s,int[]f,int k,int n){ int m = k+1; while(m<=n&&s[m]<f[k]){ m = m+1; } if(m<=n){ res = res+" "+m; recuract(s,f,m,n); ..

2020-08-28 22:17:07 140

原创 算法导论-贪心算法-活动选择问题

先给出一个我写的动态规划方法的解法,求出最大活动集合中活动的个数。public class Activitychoice { //s,f是活动的开始时间和结束时间数组 public static int[] s={1,3,0,5,3,5,6,8,8,2,12}; public static int[] f={4,5,6,7,9,9,10,11,12,14,16}; public static int mmax = 0; public static int acti..

2020-08-26 22:55:08 278

原创 算法导论-渐近记号

2020-06-26 16:56:47 178

原创 算法导论-动态规划-最长公共子序列(LCS)

//计算两个序列的LCS长度和序列,例如x为{A,B,C,B,D,A,B} y为{B,D,C,A,B,A}public static void calcLcs(ArrayList<Character>x,ArrayList<Character>y){ int m = x.size(); int n = y.size(); int[][] b = new int[m+1][n+1]; int [][]c = new int[m+1][n+1];...

2020-06-13 11:06:33 279

原创 算法导论-动态规划-矩阵链乘法

CSDN写公式太蛋疼,所以在Word里写完截图发这。//p 按照从左到右的顺序依次放入矩阵的长宽,例如A m*n B n*y C y*j 则p为 {m,n,y,j}public static void matrixchainorder(ArrayList<Integer> p){ int n = p.size()-1; int [][] m =new int[n+1][n+1]; int [][] s= new int[n][n+1];

2020-06-05 20:51:56 195

原创 算法导论-动态规划-钢条切割补充

问题: 在求出钢条切割的最高价格后,求出最优切割方案解: //给出价格数组p,钢条长度n,得出切割的方案。例如p ={-1,1,5,8,9,10,17,17,20,24,30},n=7,输出1,6 public static void slicepos(int[]p,int n){ int n2 = getprice4(p,n); System.out.println(n2); if(n-n2>0){ ...

2020-05-30 15:32:52 271

原创 算法导论-动态规划-钢条切割

问题:有一个长度为n的钢条,还有一个长度为n的价格表,此表对应钢条长度1至n对应的价格,如何切割钢条能得到最大的收益?解:法1: //原始的递归方法解决 public static int getprice(int[]p,int n){ if(n==0){ return 0; } int q =-1; for(int i = 0;i<n;++i){ q=Math.max(q,p[i]+get

2020-05-30 00:00:57 198

原创 笔记: 条款45: 运用成员函数模板接受所有兼容类型

   这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。真实指针做得很好的一件事是,支持隐式转换,继承类指针可以隐式转换为基类指针,指向non-const对象的指针可以转换为指向const对象的指针。例如有下面的一个三层继承体系中的一些转换:class Top{};class Middle:public To...

2018-07-20 16:51:49 276

原创 笔记:条款21: 必须返回对象时,别妄想返回其reference

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。以下代码中重写的operator* 以传值方式返回。效率低,内部调用构造函数,返回时调用拷贝构造、析构函数。例如下面代码调用了3次构造函数 1次拷贝构造 4次析构。(VS2015 debug版)class Rational {public: Rational(i...

2018-07-20 16:47:42 270

原创 笔记:条款28: 避免返回handles指向对象内部部分

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。注意以下代码中,外界通过调用B类的get函数可以修改B类中指针指向的成员,而get函数是个const,但其实那部分数据应该是不能改变的。class A {public: A(string&amp;s) { a = s; } void set(string...

2018-07-20 16:44:14 165

原创 笔记:条款43: 学习处理模板化基类内的名称

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。当模板没有遇到继承时,下例可以编译通过。class companyA {public: void sendCleartext() { cout &lt;&lt; "1" &lt;&lt; endl; } void sendEncrypted() {...

2018-07-20 00:09:42 228

原创 笔记:条款40: 明智而审慎地使用多重继承

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。多重继承可能从一个以上的基类继承相同名称(如函数、typedef等等),例如下:class A {public: void check() { cout &lt;&lt; "A" &lt;&lt; endl; }};class B {privat...

2018-07-20 00:08:21 245

原创 笔记: 条款39: 明智而审慎地使用private继承

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。如果类之间的继承关系是private,编译器不会自动将一个继承类对象转换为一个基类对象。private继承意味着根据某物实现出,和复合的意义一样。通过使用复合+public继承使得继承的类无法继承它并重新定义它的虚函数,模拟java中的final或c#中的seal...

2018-07-20 00:06:44 256

原创 笔记:条款35: 考虑virtual函数以外的其它选择

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。使用non-virtual interface(NVI)手法,那是Template Method设计模式的一种特殊形式。它以public non-virtual成员函数包裹较低访问型(private或protected)的虚函数。例如:class A {pub...

2018-07-19 21:00:54 197

原创 笔记:条款33: 避免遮掩继承而来的名称

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。当发生继承时,如下所示,子类的mf1会遮挡父类中的mf1()和mf1(int), 编译器默认的行为是不允许父类中的重载函数派生到子类中,如果想在子类中使用父类中的重载函数,那么要在子类中使用using,本例中就是using A::mf1;class A {publ...

2018-07-19 20:58:16 157

原创 笔记: 条款31: 将文件间的编译依存关系降至最低

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。考虑如下程序, B.h的任何改变都会重新编译源文件,目的是解除接口和实现的耦合关系,有2种方法: Handle classes和Interface classes.第一种方法类似模拟java中的一种机制,不需要class的定义式就可以声明一个对象,本质上在java中声...

2018-07-19 20:56:08 363

原创 笔记:条款15: 在资源管理类中提供对原始资源的访问

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。一种方法是提供一个get函数,返回原始资源。另一种方法是提供隐式转换函数operator type() const {  return xxx;}请记住API 往往要求访问原始资源(raw resource),所以每一个 RAII class 应该提供...

2018-07-19 20:09:38 179

原创 笔记:条款14: 在资源管理类中小心copying行为

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。当我们自己写一个使用RAII管理不在heap存储区中建立资源时,应该考虑当一个RAII对象被复制,会发生什么事情。大多数时候会选择两种可能:禁止复制 对底层资源祭出“引用计数法”正常的非heap存储区的RAII管理类如下:class Mutex {};void...

2018-07-19 20:08:34 172

原创 笔记:条款13: 以对象管理资源

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。考虑以下代码:void f() { Investment* pInv = creatInvestment(); ... ... delete pInv;}如果在…区域内抛出异常或出现return,则会导致没有释放资源,导致内存泄漏。解决此问题的方...

2018-07-19 20:05:47 175

原创 笔记:条款12: 复制对象时勿忘其每一个成分

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。   如果你声明自己的copying函数(拷贝构造,拷贝赋值),那么编译器在你做出错误的动作时不会告诉你,下面定义的copying函数没有对Defau赋值或初始化,而编译器不会管。class Defau {public: int i = 10;};class...

2018-07-19 20:03:54 169

原创 笔记:条款11: 在operator= 中处理“自我赋值”

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。有一份自我赋值不安全和异常不安全的代码如下:class Bitmap {};class Widget {private: Widget(Bitmap*pb):p(pb){ } Bitmap* p; //指向一个从heap分配而得的对象。 Widget...

2018-07-19 20:01:46 180

原创 笔记:条款9: 绝不在构造和析构过程中调用virtual函数

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。      我们原本认为构造子类对象时,如果在父类的构造函数中调用虚函数就会调用子类的虚函数,然而编译器会调用父类的虚函数,如果父类的虚函数是纯虚函数,编译器就会找不到父类虚函数的实现代码。       编译器对这种在父类中调用虚函数的做法的一个解决方案是:继承类对象...

2018-07-19 19:59:01 170

原创 笔记:条款4:确定对象被使用之前已先被初始化

这是我在阅读Effective c++中认为比较重要的部分,下面给出了我对这一节的理解,并写出对应的比较容易理解的代码。重要的的类中的构造函数是赋值而不是初始化,对于类类型name,则是先初始化再赋值,对于内置类型nums,编译器不保证会初始化。class A { A(string&amp;name, int nums) { name = name; nums = nums...

2018-07-19 19:53:32 150

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除