
C++
文章平均质量分 72
C++相关内容
21号 1
愿酣睡安抚你眼,愿平静安息你心
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
8.库制作与原理
库是写好的现有的,成熟的,可以复⽤的代码。原创 2025-06-07 23:53:14 · 838 阅读 · 0 评论 -
1.初识C++(随笔,不适合0基础看)
1.1.4 项目工程中多文件定义的同名namespace会认为是同一个namespace不冲突(其实是系统把他们合并到一起了)inline适合于频繁调用的短小函数,对于递归函数,代码多一些的函数,加上inline也会被编译器忽略---会造成 代码膨胀。1.1.2命名空间实际是定义一个域,这个域与全局域独立,不同的域可以定义同名变量,避免产生冲突。*设计目的是替代宏(宏替换不会像函数调用建立栈帧,更快,但是宏极易出错)函数局部域,全局域,命名空间域,类域。命名空间域,类域不会影响生命周期。原创 2024-11-17 13:15:51 · 563 阅读 · 3 评论 -
2.类与对象(上)
即struct中也可定义函数,这是类与struct的最大区别。原创 2024-11-17 22:32:00 · 594 阅读 · 3 评论 -
3.类与对象(中)
1.构造函数。原创 2024-11-21 12:00:47 · 1905 阅读 · 2 评论 -
4.类与对象(下)
静态成员变量不能在声明位置给缺省值初始化,缺省值是构造函数初始化列表的,静态成员变量不属于某个具体对象,不走构造函数初始化列表。~用类型定义出来的对象叫作匿名对象,相比之前我们定义的 类型对象名 定义出来的的叫有名对象。匿名对象生命周期只在当前一行,一般临时定义一个对象当前用一下即可,就可以定义匿名对象。~静态成员函数中可以访问其他的静态成员,但不能访问非静态的,因为没有this指针。(静态成员也是类的成员,受访问限定符限制)~非静态的成员原函数可以访问任意的静态成员变量和静态成员函数。原创 2024-11-24 21:45:29 · 1120 阅读 · 3 评论 -
5.C/C++的内存管理
【代码】5.C/C++的内存管理。原创 2024-11-27 20:07:36 · 785 阅读 · 4 评论 -
6.模板初阶
【代码】6.模板初阶。原创 2024-11-29 10:01:11 · 511 阅读 · 2 评论 -
8.Vector(顺序表)
扩容缩容都会导致迭代器失效,需要更新迭代器,如:erase函数,它本身会返回删除后迭代器的位置,so在应用中:it = erase();原创 2025-01-17 09:00:08 · 392 阅读 · 0 评论 -
9.List(带头双向循环链表)
2.->运算符重载注意。4.模拟实现List。原创 2025-01-20 21:26:16 · 496 阅读 · 0 评论 -
10.Stack-Queue-Priority_queue
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中。元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用。比较,头插效率高,不需要搬移元素;,双开口的含义是:可以在头尾两端。原创 2025-01-22 22:52:39 · 916 阅读 · 0 评论 -
11.模板(进阶)
2.原创 2025-01-23 23:37:45 · 509 阅读 · 0 评论 -
12.继承
1.1继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承是类设计层次的复用。⽀持多继承就⼀定会有菱形继承,像Java就直接不⽀持多继承,规避掉了这⾥的问题,所以实践中我们也是不建议设计出菱形继承这样的模型的。:⼀个派⽣类有两个或以上直接基类时称这个继承关系为多继承,多继承对象在内存中的模型是,先继承的基类在前⾯,后⾯继承的基类在后⾯,派⽣类成员在放到最后⾯。原创 2025-02-22 14:22:01 · 700 阅读 · 0 评论 -
13.多态
派⽣类重写,但是语法上可以实现),只要声明即可。下⾯的代码我们可以看到,如果~A(),不加virtual,那么delete p2时只调⽤的A的析构函数,没有调⽤B的析构函数,就会导致内存泄漏问题,因为~B()中在释放资源。派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型,函数名字,*参数的类型完全相同),则称派生类的虚函数重写了基类的虚函数。运行时到指向的对象的虚表中确定对应的虚函数的地址,这样就实现了指针或引用指向基类就调基类的虚函数,指向派生类就调用派生类对应的虚函数。原创 2025-02-21 16:47:58 · 659 阅读 · 0 评论 -
14.二叉搜索树
key/value的搜索场景实现的⼆叉树搜索树⽀持修改,但是不⽀持修改key,修改key破坏搜索树性质了,可以修改value。*⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义,后续我们学习map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不⽀持插⼊相等。树不空,按⼆叉搜索树性质,插⼊值⽐当前结点⼤往右⾛,插⼊值⽐当前结点⼩往左⾛,找到空位。如果⽀持插⼊相等的值,插⼊值跟当前结点相等的值可以往右⾛,也可以往左⾛,找到空位置,插。原创 2025-02-26 22:53:48 · 328 阅读 · 0 评论 -
15.map与set的使用
map底层的红⿊树节点中的数据,使⽤pair<Key, T>存储键值对数据。原创 2025-03-11 18:26:03 · 665 阅读 · 0 评论 -
16.AVL树实现
AVL树实现这⾥我们引⼊⼀个平衡因⼦(balance factor)的概念,每个结点都有⼀个平衡因⼦,任何结点的平衡因⼦等于右⼦树的⾼度减去左⼦树的⾼度,也就是说任何结点的平衡因⼦等0/1/-1,AVL树并不是必须要平衡因⼦,但是有了平衡因⼦可以更⽅便我们去进⾏观察和控制树是否平衡,就像⼀个⻛向标⼀样。3.AVL树整体结点数量和分布和完全⼆叉树类似,⾼度可以控制在 ,那么增删查改的效率也可以控制在 ,相⽐⼆叉搜索树有了本质的提升。左右⼦树都是AVL树,且左右⼦树的⾼度差的绝对值不超过1。原创 2025-03-13 22:32:17 · 195 阅读 · 0 评论 -
17.红黑树实现
红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。检查4点规则,满⾜这4点规则,⼀定能保证最⻓路径不超过最短路径的2倍。按⼆叉搜索树逻辑实现即可,搜索效率为。*情况2:单旋+变色。*情况3:双旋+变色。原创 2025-03-14 19:55:24 · 285 阅读 · 0 评论 -
18.封装红黑树实现mymap和myset
如下图:当it指向50时,++it时,50是40的右,40是30的右,30是18的右,18到根没有⽗亲,没有找到孩⼦是⽗亲左的那个祖先,这是⽗亲为空了,那我们就把it中的结点指针置为nullptr,我们⽤nullptr去充当end。迭代器++时,如果it指向的结点的右⼦树不为空,代表当前结点已经访问完了,要访问下⼀个结点是右⼦树的中序第⼀个,⼀棵树中序第⼀个是最左结点,所以直接找右⼦树的最左结点即可。*相⽐源码调整⼀下,key参数就⽤K,value参数就⽤V,红⿊树中的数据类型,我们使⽤T。原创 2025-03-18 19:37:11 · 396 阅读 · 0 评论 -
19.哈希表的实现
1.哈希的概念1.哈希的概念哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。1.2.直接定址法当关键字的范围⽐较集中时,直接定址法就是⾮常简单⾼效的⽅法,⽐如⼀组关键字都在[0,99]之间,那么我们开⼀个100个数的数组,每个关键字的值直接就是存储位置的下标。原创 2025-03-21 23:41:19 · 869 阅读 · 0 评论 -
21.C++11
调试时发现一个问题ovo。原创 2025-04-15 17:36:55 · 1646 阅读 · 0 评论 -
22.异常
1.异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理,异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。2.C语⾔主要通过错误码的形式处理错误,错误码本质就是对错误信息进⾏分类编号,拿到错误码以后还要去查询错误信息,⽐较麻烦。异常时抛出⼀个对象,这个对象可以函数更全⾯的各种信息。原创 2025-04-16 09:05:23 · 709 阅读 · 0 评论 -
23.智能指针的使用及其原理
1.智能指针的使用场景分析1.智能指针的使用场景分析下⾯程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后⾯的delete没有得到执⾏,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本⾝也可能抛异常,连续的两个new和下⾯的Divide都可能会抛异常,让我们处理起来很⿇烦。智能指针放到这样的场景⾥⾯就让问题简单多了。2.RAII和智能指针的设计思路3.C++标准库智能指针的使用4.智能指针的原理。原创 2025-04-17 12:30:20 · 375 阅读 · 0 评论 -
24.并查集
在一些应用问题中,需要。。在此过程中。适合于描述这类问题的抽象数据类型称为。1.2.3.原创 2025-04-17 12:30:38 · 251 阅读 · 0 评论