学习笔记
hereIambabe
这个作者很懒,什么都没留下…
展开
-
图论-拓扑排序(学习数据结构与算法分析 C++第三版—clifford A.Shaffer著)有感
”将一个DAG(有向无环图)中所有顶点在不违反前置依赖条件规定的基础上排成线性序列的过程称为拓扑排序。”在书上给了两个算法,一个是基于DFS,一个是基于队列统计入度来做。其实我觉得这两个算法的根源,其实就在于一个顶点(当然啦,在实际应用中可能是任务、工程等等等等。。。。。。)它的前置条件条件有多少?DFS的末端,其实就是一些前置条件尽可能多,注意,是尽可能多的点,因为你不断的深入,也就原创 2017-12-18 15:03:16 · 1563 阅读 · 0 评论 -
对象指针
#includeusing namespace std;class student{ public: student() { m_iNum=0; } int getNum() { return m_iNum; } private: int m_iNum; };int main(){ student *stu=new student; coutg原创 2017-08-31 21:44:46 · 116 阅读 · 0 评论 -
学习c++拷贝函数有感
#includeusing namespace std;class Array{ public: Array(){ m_iCount=5; } Array(const Array&arr) { m_iCount=arr.m_iCount; } private: int m_iCount;};int main(){ Array arr1;原创 2017-08-31 20:27:50 · 152 阅读 · 0 评论 -
关于含有对象成员的类如何进行初始化?
demo.cpp#include#include"Banji.h"using namespace std;int main(){ Banji b; system("pause"); return 0;}Student.hclass Student{ public: Student(); ~Student(); void setNum(int原创 2017-08-31 18:38:23 · 4779 阅读 · 0 评论 -
使用堆的方式弄出来一个数组为什么一定要delete[]
很简单,因为我们不delete[]的话,将会导致内存泄漏详见下面的几个截图你会发现。。。。。。这样子会导致程序直接崩溃的。。。。。。这是最最最让人难以忍受的后果同时还有一些小关键对于指针,我觉得真的有很多要注意的小地方。首先我们如果使用coor++,那么此时我们的coor[0]就不是指向第一个元素了,而是指向第二个元素了,虽然它的索引是0,而且此原创 2017-08-31 16:47:29 · 411 阅读 · 0 评论 -
C++写类的时候,涉及到对象成员的时候的两个有感
第一个:就比如我们现在要做一个班级类班级类里面有很多很多小朋友,每一个小朋友都是一个相对于班级类而言的对象成员我们写Banji.h的时候理所当然的就要#include"Student.h"这个时候我们写好了所有的分文件,再在我们的main.cpp,实现我们想要的程序的时候,很容易会写这样的一个头文件#include"Banji.h"#include"St原创 2017-08-31 17:25:13 · 157 阅读 · 0 评论 -
如何用栈的方式初始化一个带参构造函数的对象数组
#include"Coordinate.h"#includeusing namespace std; Coordinate::Coordinate(int x):m_iX(x) { cout<<"Coordinate"<<endl; } Coordinate::~Coordinate() { cout<<"~Coordiante"<<endl; }cla原创 2017-08-31 16:18:32 · 595 阅读 · 0 评论 -
关于c++的数组的初始化探讨
这种初始化方法可能会有同学觉得会让所有的元素的值为0,但实际上就是第一个元素为1,其他元素为0我想了一下,可能平时大家都是写成 所以有这样的一种错觉,觉得花括号里面的数字让所有的元素的值为0如果我们,没有进行任何初始化的操作会出现什么呢就是可能会出现一些随机值,所以说在声明一个数组的时候最好及时进行初始化,要么可能会出现不可意料的情况发生。原创 2017-09-15 20:06:17 · 218 阅读 · 0 评论 -
C++学习-拷贝构造函数
引言:#includeusing namespace std;class Student{public:Student(){cout} private:string m_strName;} ;int main(){Student stu1;Student stu2=stu1;Student stu3(stu1);}原创 2017-08-15 09:48:37 · 225 阅读 · 0 评论 -
对象成员指针学习到的一些感想
先贴上代码demo.cpp#include#include#include"Line.h"using namespace std;int main(){ Line *p=new Line(1,2,3,4); delete p; p=NULL; system("pause"); return 0;}Line.h#include"Coordinate.h"cla原创 2017-09-01 09:22:02 · 184 阅读 · 0 评论 -
this指针?const函数?const对象成员?
#includeusing namespace std;class Coordinate{ public: Coordinate() { } ~Coordinate() { } void setNum(int x) { cout<<"YES"<<endl; } int getNum() { return m_iNum; } private:原创 2017-09-01 11:35:06 · 203 阅读 · 0 评论 -
基于顺序表实现线性表
大家好呀~好久没有和大家见面啦~~~进入大二了然后现在学业有点忙呢hh,做的题目少了然后时间利用的不是很有效率~所以说写一下博客来督促自己学习吧~今天使用程序实现了一下线性表。这次突破了一下自己使用了类模板,以前我都是直接在函数声明之后马上就实现,但是今天我想让整个类变得更加简明扼要一些,所以采用了类外实现。然后类外实现发现我们还要有一些要注意的地方~就是实现函数之前,都要加一原创 2017-10-31 22:54:20 · 508 阅读 · 0 评论 -
C++指针,小心晕针
今天写了个程序,没有想到学到了一个新的知识点。一开始我的p是指向了a这个错误的原因是我们delete的内存并不是我们一开始new出来的内存,做出修改delete掉p指向的一开始new出来的内存,还可以指向别的内存,使用起来还是挺好的。原创 2017-11-04 10:57:05 · 337 阅读 · 0 评论 -
今天实现二叉树的时候遇到了一个很有意思的问题
之前写的时候并没有注意那么多,想着return p放在else里面还是外面都不成问题但是放在else外面的话会报错,说并没有定义这个字符我就奇了怪了,我不是在else里面定义好了吗后来我想了一想这样子也是有原因的我们的函数有可能一直都不进入else虽然逻辑上我们之前的return NULL就足以保证安全但是显得并不十全十美原创 2017-11-17 23:32:38 · 289 阅读 · 0 评论 -
链式队列!
#includeusing namespace std;templateclass node{public: E data; node*next; node(E it=0,node*p=NULL) { data = it; next = p; }};templateclass Queue{private: node原创 2017-11-03 17:08:57 · 291 阅读 · 0 评论 -
链式栈
实现:#includeusing namespace std;templateclass node{public: E data; node* next; node(E it, node*p = NULL) { data = it; next = p; } ~node() { cout<<data<<endl; cout<<"析构函数"<<endl;原创 2017-11-03 15:24:24 · 270 阅读 · 0 评论 -
stack(栈)!基于顺序表实现
这个星期学到了栈。老师一开始就给我们明确一个概念,我们有堆,有栈,但是没有堆栈!!!O(∩_∩)O我们先明确一下stack的概念吧。栈(stack)是限定仅在一端进行插入或删除操作的线性表。成为“LIFO”线性表,意思是“后进先出”,(last in first out)术语:top(栈顶元素)--可访问元素push(入栈)---元素插入pop(出栈)--元素删原创 2017-11-03 08:21:37 · 312 阅读 · 0 评论 -
自己基于指针实现双链表(1.0)(shaffer教材)
双链表和单链表其实其实起来大同小异。双联表其实就是每一个节点都有前驱和后继,可以说,整个双链表的具体实现起来比单链表更加灵活,但是增加了结构性开销(前驱)。有以下几个异同点:1、因为双链表中每一个节点都有前驱和后继,那么我们现在curr可以是真正的curr了!2、还是关于tail节点,究竟tail结点是没有实际内涵还是指向最后一个实际节点呢?在我看来,如果你的cur原创 2017-11-03 00:56:55 · 303 阅读 · 0 评论 -
自己基于指针实现单链表(1.0)(shaffer教材)(2.0)
因为数据结构的代码没有最好,只有更好,因此在文章后面加个版本号记录一下自己的代码变化hh。基于单链表实现线性表我们有几个点需要注意一下:1、curr的位置应该是“我们想象的”当前位置的前一个位置举例子:1,2,3,4,5,我们如果想在3插入位置,那么curr就应该设定在2如果我们设定在3,那么我们就无法找到3的前驱2来修改它的后继。有补救方法,记录当前是第几个节点,原创 2017-11-02 23:30:15 · 246 阅读 · 0 评论 -
关于Clifford A.Shaffer老师数据结构与算法分析中里用链表实现线性表的具体实现的感想
看了shaffer老师的代码,觉得这里面有很多值得学习的地方,下面一一阐述。(单链表)templateclass Link{public: E element; Link *next; Link(const E&elemval,Link*nextval=NULL) { element =elemval;next=nextval; } Link(Link*nextval=N原创 2017-11-01 13:56:56 · 1320 阅读 · 0 评论 -
背包九讲第一讲-简单的0/1背包问题有感1.4
在背包九讲中,还提及到了初始化的问题这是来自崔添翼 (Tianyi Cui, a.k.a. dd_engi)老师的背包九讲的讲解:1.4 初始化的细节问题我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。 有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背 包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。如果是第一种问法,要原创 2017-08-12 19:22:44 · 321 阅读 · 0 评论 -
背包九讲第一讲-简单的0/1背包问题有感1.3
如何改进呢?我觉得大家还是可以先看看这一幅图ok。。。。。。我们先focus on输出14,那部分正确的。0 0 5 5 5 5 50 0 5 8 8 13 130 0 5 8 9 13 14不知道大家对于这个有没有什么想法。。。。。。是不是觉得,好像有一些东西是重复的,没用的。我那时候看上去我觉得,可能能够通过使用dp一维数组来降低我们的复杂度。原创 2017-08-12 19:16:25 · 392 阅读 · 0 评论 -
C++引用新知识点
在网上学习后突然发现,引用居然还可以运用到指针上!也就是说,我们可以给指针起一个别名???!原创 2017-07-15 08:04:33 · 153 阅读 · 0 评论 -
关于命名空间自己写的小程序
#includenamespace xiao_papa{ int x = 1; void f1() { std::cout }}namespace da_papa{ int x = 2; void f1() { std::cout }}int main原创 2017-07-15 07:26:47 · 261 阅读 · 0 评论 -
c++ Premier 学习笔记(unit2 变量和基本类型 -引用
(因为是学习笔记,所以很多地方直接从书上敲在电脑上,所以标记成为“转载”)引用的再次学习 C++11中新增了一种引用:所谓的“右值引用(rvalue reference)”。这种引用主要用于内置类。严格来说,当我们使用术语“引用(reference)”时,指的其实是“左值引用(lvalue reference)”。 引用(reference)为对象起了另外一个名字,转载 2017-07-14 21:16:45 · 242 阅读 · 0 评论 -
C++ Primer学习笔记(unit 2 变量和基本类型 -标识符
(因为是学习笔记,所以很多地方直接从书上敲在电脑上,所以标记成为“转载”)C++的标识符(identifier)由字母、数字和下画线组成,其中必须以字母或下画线开头。标识符的长度没有限制,但是对大小写字母敏感:同时,c++也为标准库保留了一些名字。用户自定义的标识符中不能连续出现两个下画线,也不能以下划线紧连大写字母开头。此外,定义在函数体外的标识符不能以下画线开头。转载 2017-07-14 21:15:50 · 206 阅读 · 0 评论 -
c++ Premier 学习笔记(unit2 变量和基本类型 -声明与定义
(因为是学习笔记,很多地方直接从书上敲下来,所以归到转载这一类变量的声明和定义的关系 为了支持分离式编译,C++语言将声明和定义区分开来。声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义(definition)负责创建与名字关联的实体。 变量声明规定了变量的类型和名字,在这一点上定义转载 2017-07-14 21:14:05 · 365 阅读 · 0 评论 -
c++ Premier 学习笔记(unit2 变量和基本类型-对象与初始化
(因为是学习笔记,所以很多地方直接从书上敲在电脑上,所以标记成为“转载”)术语:何为对象? C++程序员在很多场合都会使用对象(object)这个名词。通常情况下,对象是指一块能储存数据并具有某种类型的内存空间。 一些人仅在与类有关的场景下才使用“对象”这个词。另一些人则已把命名的对象和未命名的对象区分开来,他们把命名了的对象叫做变量。还有一些人把对象和值区转载 2017-07-14 21:12:07 · 334 阅读 · 0 评论 -
c++ Premier 学习笔记(unit2 变量和基本类型
几个funny的点:unsigned char c=-1;//假设char占8比特,c的值为255当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8比特大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigne转载 2017-07-13 23:13:37 · 255 阅读 · 0 评论 -
C++ Primer学习笔记(unit 2 变量和基本类型
(因为是学习笔记,所以很多地方直接从书上敲在电脑上,所以标记成为“转载”)1、 关于内置类型的机器实现计算机以bite序列储存数据,每个比特非0即1,例如:00011011011100010110010000111011…大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节(byte)”,存储的基本单元称为“字(word)”,它通常由几个字节组成。在c转载 2017-07-13 22:54:52 · 314 阅读 · 0 评论 -
引用新体验!
在刚才,我乱改自己的程序发现了这样的一个问题对,这就是我的思维定式。。。。。。我们首先看一下c这个指针指的是什么。指的是b,b是什么,b是a指针的别名。也就是说是int *类型的,所以我们可以用下面的代码我们发现可以run了,但是出现了一个问题,那就是本来我想知道的是那个值,我们可以把c理解为a的指针的指针,如果*c输出的是地址,那么**c那就应该可以得到我想要的值原创 2017-07-15 08:16:11 · 175 阅读 · 0 评论 -
学const写出来的3个有意思的情况
原创 2017-07-16 23:16:50 · 133 阅读 · 0 评论 -
背包九讲第一讲-简单的0/1背包问题有感1.2
对于我有保留的地方,是j的取值范围为什么是从w[i]开始呢?我的疑问来源于下面这个网址的一道题:http://www.51nod.com/tutorial/course.html#!courseId=6输入第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000)第2 - N + 1行,每行2个整原创 2017-08-12 19:02:42 · 257 阅读 · 0 评论 -
背包九讲第一讲-简单的0/1背包问题有感1.1
背包问题的核心是一条状态转移方程:我用zone表示背包的最大空间j=w[i];jdp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);在这里,dp是存储最大价值的数组,其中i代表,现在正在考虑第几个物品,要知道,我们前面的i-1个物品已经都求解完毕并且存储起来了。w[i]对应了第i件物品的重量(容积),v[i]对应了第i件物品的价值在这里我原创 2017-08-12 18:53:28 · 373 阅读 · 0 评论 -
emmmmm......滚动数组和0/1背包问题的一些新体会
今天下午上了一节课,讲的是关于dp问题,我觉得这里面有两个点挺吸引我的。第一个就是当老师讲到了0/1背包问题的时候,说到了一个情况,那就是我们在什么时候采取dp这种方法做比较好老师给的一个小限定就是当背包的容量大小远远小于2的n次方(n是物品数量)这个也不能想象,因为我们知道我们的0/1背包问题的复杂度,就是O(nc),(c是背包的容量)如果我们的c不能和2的n次方形容一个明显原创 2017-08-17 17:28:25 · 385 阅读 · 1 评论 -
c++中关于设置左对齐和右对齐的问题解决方法
不知道大家有没有试过,设置了左对齐后,后面设置了右对齐,然后左对齐的cout在后面的循环中不起作用了,如图下所示。解决方法有两个,第一个第二个感谢http://bbs.csdn.net/topics/392202899里面回答我的问题的两位前辈zhao4zhong1loneking2001~以及我的助教姐姐。原创 2017-07-26 09:05:31 · 19418 阅读 · 3 评论 -
C++学习-对象数组
先上个代码#include#includeusing namespace std;class Student{public: Student() :m_strName("Adison"), m_intnumber(20318) { cout << "Student" << endl; } Student(const Student&stu) :m_strName("Ali原创 2017-08-16 09:57:23 · 140 阅读 · 0 评论 -
cin不能接受空串但是getline可以!
代码如图可以发现,如果我们使用cin,那么我们按回车将会无限的循环原创 2017-07-22 12:07:46 · 317 阅读 · 0 评论 -
类似cout<<a[len1--]<<endl;这样子的表达形式探秘
昨天学习写大数加法的时候遇到了一条语句让我非常困惑。。。。。。sum = last+s[len1--]-'0'+s2[len2--]-'0';大概是类似这种形式,就是在一个字符串的下标用了自增自减的这样子一种表达形式,为了解决这个疑惑,自己写了个小检验程序。就是这样子的一个检验程序,我们可以看见,a字符串是一个大小为3,内容为123的字符串。b字符串是一个大小为3,内容为456原创 2017-07-31 09:04:39 · 420 阅读 · 0 评论 -
原来,C++的for的判断条件很神奇!!
其实这道题就是第一个数字为后面一共有多少个数字但是我们分析一下这种输出结果首先,i此时输入了n=1;这时候跳出for循环输出sum=1;此时n输入了2i输入了n=3;sum=3;然后i输入了n=4;sum还是3;之后输入了n=1;i明显大于1,跳出for循环输出3;也就是说for的判断条件中的n,我一直以为会按一开始的n=4来控制原创 2017-07-20 20:39:57 · 1315 阅读 · 0 评论