- 博客(61)
- 收藏
- 关注
原创 C++异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了这里简要来说就是使用子类和父类来定义自定义异常体系:使用父类来接受异常,使用子类来抛出异常;//基类//异常public:, _id(id){}protected://错误信息int _id;//错误码//派生类//数据库异常public:{}
2024-07-22 20:11:48
853
原创 小成代码路的错误2
在定义后面添加“:”+继承方式+父类名字;这里使用子类变量来调用父类的函数,变量时;会将子类的切片成父类对象;来以父类的方式来调用函数;这个文件就是c库;
2024-06-09 10:50:11
1879
原创 C++11的改变
/函数return i/2;return d/3;// 函数指针// 仿函数// lambda 表达式return 0;通过 count 变量的地址我们可以发现,尽管 T 的类型相同**,但 useF 函数还是被实例化了三份,**这是因为形参 F 会根据实参的不同而实例化出不同的函数,也就是说,形参 F 的类型有多个,那我们能不能让其类型变为一个,从而只实例化出一份函数呢?function 包装器可以解决这个问题。function出现之前只能使用模板来统一调用这些函数;
2024-05-30 23:04:28
572
原创 数据结构-C语言第二版-期末复习考点整理第一章
算法是为了解决某类问题而规定的一个有限长的操作序列。一个算法必须满足以下五个重要特性: 无穷性、确定性、可行性、输入、输出。
2024-05-18 16:08:28
321
原创 BloomFilter------布隆过滤器
我们可以来估算一下,假设用 3 个哈希函数,即K=3,ln2 的值我们取 0.7,那么 m 和 n 的关系大概是 m = n×k/ln2=4.2n ,也就是。提高查找效率:客户端中查找一个用户的ID与服务器中的是否相同,在增加一层布隆过滤器提高查找效率:如果不在服务器那就是不在,如果返回存在,需要向服务器验证;:随着一个数据对应的位置越多,相应的误判率下降了;原因:删除一个元素的相应位图的几个位置可能会影响其他元素的存在与否;布隆过滤器是由布隆在1970年提出的一种紧凑型的,比较巧妙的概率性数据结构,
2024-05-18 16:05:00
868
原创 二叉树之AVL树
AVL树节点的定义{}// 该节点的左孩子// 该节点的右孩子// 该节点的双亲T _data;int _bf;// 该节点的平衡因子。
2024-04-21 16:50:06
891
原创 高级数据结构:并查集
对于一个集合S={a1,a2,……an-1,an},这是可以对集合S进一步划分:S1,S2,……,Sm-1,Sm,我们希望能够快速确定S中的两两元素是否属于S的同一子集;举个栗子,S={0,1, 2, 3, 4, 5, 6},如果我们按照一定的规则对集合S进行划分,假设划分后为S1={1, 2, 4}, S2={3, 6},S3={0, 5},任意给定两个元素,我们如何确定它们是否属于同一子集?某些合并子集后,又如何确定两两关系?基于此类问题便出现了并查集这种数据结构。FInd:查找元素所有子集。
2024-01-06 00:17:37
907
原创 map和set
set文档介绍** 功能**排序+去重;这两种函数定义多使用第一个;第一定义中的bool是判断插入是否成功;这里注意pair对象在类外定义时,要将迭代器的模板加上;两者都是参数是set中的值返回指针;前者返回>=val值的位置后者返回>val值位置注意两个模板参数这里传输k的值【】会查找map中的相同k的元素并返回v的引用;
2023-11-23 16:19:51
59
原创 C++多态
同样的动作;不同的效果;示例函数重载:实在一个类中定义两个函数名字相同;但是参数的类型或个数有关;重定义:存在在(继承)两个类中,一个是父类,一个子类;子类写一个和父类相同名字的函数就构成了重定义;虚函数重写:存在在继承的条件下;一个子类,一个父类,;子类和父类将同名函数都改为virtual版本;(这里要求两个函数的表头三件套必须一致)
2023-11-04 18:30:13
132
原创 C++中的继承
规律:private成员经过如任何继承都会是不可见的;public成员和protected成员在和各类继承中两者选其小;父类和子类存在相同名字的变量或函数名这里的子类使用重定义的变量或函数按照就近原则;子类有就先使用子类的;
2023-10-30 11:01:33
173
原创 Linux权限的概念
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。只有文件的拥有者和root才可以改变文件的权限。是0002的原因是想将other的权限清理;-:向权限范围取消权限代号所表示的权限。
2023-10-29 23:15:41
120
原创 模板(进阶)
本质:常量;这里不可以传变量;** 该参数应用范围较少;多用于数组的下表访问**这里传整形家族都可以:char或int;一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。
2023-10-21 19:31:57
125
原创 仿函数c++
是一种重载了函数调用运算符operator()的类或结构体,它可以像函数一样被调用。但是时使用使用对象调用仿函数可以接受参数并返回值,可以用于STL算法中的函数对象参数,也可以用于函数指针的替代。
2023-10-16 21:27:15
88
原创 list(链表)
将list的数据传给vector;在用vector的sort函数来排序;这里没有“[]"的实现;这里使用迭代器来实现;这一函数可以将数组中的连续的数字保留第一个将剩下多余的数字删除;添加一个greater变量以后就是降序;这里的转移是将原来的数据的连带节点一起转移到目标位置;sort函数在算法库中存在;**注意:**该数列去重之前必须将数组排序;注意:这里的归并两个链表必须进行顺序排列;使用随机迭代器,只能使用双向迭代器;该函数将会删除()内的数组相同的值;在这里的迭代器使用的是。将两个链表合并到一起;
2023-10-01 12:34:44
205
原创 vector的模拟实现
2.末尾为偶数:这种情况it指针将移动到原来的finish位置;1.连续偶数的数组:原因:删除当前数后;因为erase()函数的 返回值是删除位置的下一个位置;原因:构造函数已经写了(拷贝构造函数等构造函数)所以系统将不会生成默认构造函数;函数的pos指针改变;直接使用循环就可以实现多个数据的输出和输入;相对于10和0如果没有int类型的构造函数;这里的代码使用的默认构造函数;这里的迭代器使用了模板;这里tmp和_start的字符串的地址相同;使用长度的加法解决问题;这里可以看出私有成员变量的本质;
2023-09-30 00:16:44
117
原创 vector类(顺序表)
这里顺序表的定义需要示例化:vector名字这样就定义了一个A类型的顺序表这里push_back会自动添加size和capacity。
2023-09-20 17:45:57
271
原创 string类
string先创作了length()来计算字符串的长度;stl创造了size()来计算数据结构的大小;resize(n)用/0来填充多出的元素;这里范围for的本质就是迭代器:原理范围for将编译器改为迭代器来使用;C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,auto可以直接i将等号后面的类型拷贝到等号前的类型中;方法4:使用范围for(c++的for循环的简写)这里的pos是删除的前指针;算个数的方法:j将数据i想象为左闭右开的数据;
2023-09-07 16:46:57
572
原创 模板初级阶段
或template返回值类型 函数名(参数列表){}class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();
2023-08-24 21:39:51
171
原创 C/C++内存管理
int main()//动态申请一个int类型的空间;//动态申请一个int类型的空间并初始化//动态申请10个int类型的空间//动态申请10个int类型的空间并初始化//注意【】和{}之间没有=;return 0;delete操作符销毁单个变量和数组销毁变量销毁数组相比malloc更加简化了;图解c++兼容c语言;可以使用malloc和new;new操作符int main()//动态申请一个A类型的空间;//动态申请一个A类型的空间并使用构造函数初始化。
2023-08-23 00:26:20
203
原创 类与对象(下篇)
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。初始化列表和声明的区别初始化列表是进行初始化;函数体是赋值初始化列表没有写的成员内置类型定义,但不做处理;自定义类型,调用默认成员函数;不管写不写都定义;声明的缺省值和初始化列表的关系声明的缺省值将会传给初始化列表;当初始化列表没有给之值;就用缺省值;每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
2023-08-21 11:56:37
228
原创 类和对象(中篇)
1…类名+(参数1,参数2,参数3,……)1.1不需要写返回类型(不是说返回类型是void的意思,而是真的没有返回值的意思,连viod也不需要)1.2构造函数名和类名相同(一个对向在生命周期内只调用一次)无参钩造函数一旦用户显示定义,编译器就不会自动生了!例子:这里我们定义了一个有参的构造函数,如果我再去调用无参构造函数编译器就会报错;内置类型:int,char等;注意char*和结构体指针也是内置类型对于自定义类型自动初始化的优势,对栈建立的队列有优势;自动生成。
2023-08-17 23:43:04
154
原创 类与对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。成员函数如果在类中定义,编译器可能会将其当成内联函数处理。。h文件中函数是声明;
2023-08-12 19:24:36
45
原创 C++入门
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。liu是命名空间的名字,一般开发中是用项目名字做命名空间名。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;命名空间// 1. 正常的命名空间使用// 命名空间中可以定义变量/函数/类型int val;错误使用int main()return 0;这里的a要想野地(命名空间外的空间)寻找;正确使用int main()
2023-08-11 10:42:31
427
原创 排序-数据结构
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所 有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后 取, 重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。本质:将数组分为多组,将每一组进行排序后,再将间隔逐渐变小直到为1将数组排序完成;这里gap>1时,都为预排序;gap=1时为直接插入排序;希尔排序是对直接插入排序的优化。当gap > 1时都是预排序,目的是让数组更接近于有序。
2023-07-31 12:09:10
188
原创 Linux的常见指令
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。公历是现在国际通用的历法,又称格列历,通称阳历。-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。
2023-07-27 16:11:13
53
原创 二战——顺序表和链表
1.顺序表(数组):是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构。特点:可以使用下标访问;2.链表:几个空间之间有 指针连接;
2023-07-24 10:31:15
54
原创 二叉树链式结构
二叉树的 遍历包括:前序,中序,后序的递归结构遍历;前序:根,左子树,右子树中序:左子树;根;右子树后序:左子树;右子树;根;层序:一层一层访问二叉树的前序遍历return;二叉树的中序遍历return;二叉树的后序遍历return;二叉树的层序遍历//初始化 Queue q;while(!讲述场景思路:分而治之。
2023-07-22 17:36:56
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人