- 博客(19)
- 收藏
- 关注
原创 二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树。K模型:K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。KV模型:每一个关键码key,都有与之对应的值Value,即的键值对。从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。树不空,按二叉搜索树性质查找插入位置,插入新节点。
2024-08-05 23:00:08
124
原创 多态方面的
如果基类的析构函数为虚函数,此时派生类析构函数只要定义,无论是否加virtual关键字, 都与基类的析构函数构成重写,虽然基类与派生类析构函数名字不同。普通函数的继承是一种实现继承,派生类继承了基类函数,可以使用函数,继承的是函数的实 现。虚函数的继承是一种接口继承,派生类继承的是基类虚函数的接口,目的是为了重写,达成 多态,继承的是接口。虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的 返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。
2024-08-05 19:30:51
170
原创 继承相关的
派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。在实际运用中一般使用都是public继承,几乎很少使用protetced/private继承,也不提倡 使用protetced/private继承,因为protetced/private继承下来的成员都只能在派生类的类里 面使用,实际中扩展维护性不强。
2024-08-05 18:56:08
222
原创 stack和queue
与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不 需要搬移大量的元素,因此其效率是必vector高的。但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到 某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构 时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作 为stack和queue的底层数据结构。
2024-07-27 16:17:35
380
原创 vector相关
因此迭代器失效,实际就是迭代器底层对应指针所指向的 空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器, 程序可能会崩溃)。erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增 长。
2024-07-19 17:58:14
160
原创 各种的排序
在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素。然后,取,重复上述分组和排序的工 作。是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排 序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。
2024-07-08 20:08:52
189
原创 模板的内容
类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。模板参数实例化分为:隐式实例化和显式实例化。一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。
2024-06-22 15:11:29
169
原创 内存管理等
new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的 全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局 函数来释放空间。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和 delete[],注意:匹配起来使用。代码段--可执行的代码/只读常量。
2024-06-22 14:41:54
150
原创 类和对象下
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声 明,声明时需要加friend关键字。内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中 的所有成员。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
2024-06-20 17:58:27
299
1
原创 构造函数,析构函数,拷贝构造函数
无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 在的类类型对象创建新对象时由编译器自动调用。如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦 用户显式定义编译器将不再生成。一个类只能有一个析构函数。
2024-06-20 13:21:46
298
原创 缺省参数等
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。缺省参数分为全缺省和半缺省。
2024-06-20 12:55:44
219
原创 命名空间等
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会 用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运 行效率。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。
2024-06-20 12:48:28
189
原创 编译与链接
这个过程是递归进行的,删除所有的注释行,添加行号和文件名标识,方便后续编译器生成调试信息,保留#pragma的编译器指令,后续会用。然后就是编译阶段,编译过程就是将预处理后的⽂件进⾏⼀系列的:词法分析、语法分析、语义分析及优化,⽣成相应的 汇编代码⽂件。词法分析: 将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列 的记号(关键字、标识符、字⾯量、特殊字符等)。最后就是链接,链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。也有可能是意外终⽌。
2024-03-04 18:18:03
362
1
原创 c语言文件操作
ANSIC标准采⽤“缓冲⽂件系统”处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为 程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂ 件。本节我们学习了文件相关的知识,文件分为两种,一种是程序文件,一种是数据文件,本节我们主要学习的是数据文件。“ab+”(读 写) 打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写 建⽴⼀个新的⽂件。“a+”(读写)打开⼀个⽂件,在⽂件尾进⾏读写 建⽴⼀个新的⽂件。
2024-03-04 09:42:08
350
1
原创 整数和浮点数在内存中存储
但是,我 们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;当S=1,V为负数。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最 ⾼位的⼀位是被当做符号位,剩余的都是数值位。对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。
2024-02-07 22:25:05
367
1
原创 C语⾔内存函数整理
首先第一个memcpy函数,这是一个从source的位置开始向后复制num个字节的数据到destination指向的内存位置的函数,由于指定了复制的字节数,所以无论碰不碰到、0,他都不会停下,直到复制到指定字节数。这个函数的使用很便捷,可以快速的初始化之类的操作。最后就是memcmp函数,这个和strcmp函数类似,只不过这个函数能比较的数据类型更广,可以比较两个同类数组的大小。然后就是memmove函数,这是针对memcpy函数无法满足的情况的补充,即专门来处理有重叠的情况。
2024-02-07 22:11:08
345
原创 结构体的简单介绍
..其中,TypeName是你为结构体类型定义的名称,dataType1和dataType2是成员变量的数据类型,member1和member2是成员变量的名称。例如,我们可以定义一个名为Person的结构体类型,包含name(字符串类型)和ageint age;
2023-12-04 18:28:06
318
原创 我的第一篇博客
首先是我的编程目标。不过,不管转没转成功,我都回向着我的第二个目标去努力,也就是加入我所在学校的acm队,去到队里面历练。然后就是第三个目标,出国留学,为此,必要的计算机知识是重要的,除此之外,还要通过语言关,本人想去日本留学,所以除了英语,还要学习日语,因此,留给自己休息的时间不多,但这会让我的生活更加充实,希望我不会忘记我的初心,奔着目标,只是向前去吧。对于一周来说,花在这上面的时间,每天不少于三个小时,有半天无其他安排时,这半天全部投入于这方面,基本就是能花在这上面的时间就花在这上面。
2023-10-16 19:25:15
30
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人