
C++
文章平均质量分 94
小陈️️
知不足而奋进 望远山而前行
展开
-
【C++】异常
异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理, 异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后 解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。C语⾔主要通过错误码的形式处理错误,错误码本质就是对错误信息进⾏分类编号,拿到错误码以 后还要去查询错误信息,⽐较⿇烦。异常时抛出⼀个对象,这个对象可以函数更全⾯的各种信息。原创 2025-02-12 13:57:52 · 583 阅读 · 1 评论 -
C++11特性:初始化列表、右值引用、可变模板
C++11 是 C++ 的第⼆个主要版本,并且是从 C++98 起的最重要更新。它引⼊了⼤量更改,标准化了既 有实践,并改进了对 C++ 程序员可⽤的抽象。在它最终由 ISO 在 2011 年 8 ⽉ 12 ⽇采纳前,⼈们曾使 ⽤名称“C++0x”,因为它曾被期待在 2010 年之前发布。C++03 与 C++11 期间花了 8 年时间,故⽽这 是迄今为⽌最⻓的版本间隔。从那时起,C++ 有规律地每 3 年更新⼀次。原创 2025-02-10 13:34:52 · 1093 阅读 · 1 评论 -
【C++11】lambda和包装器
原来C++类中,有6个默认成员函数:构造函数/析构函数/拷⻉构造函数/拷⻉赋值重载/取地址重 载/const 取地址重载,最后重要的是前4个,后两个⽤处不⼤,默认成员函数就是我们不写编译器 会⽣成⼀个默认的。C++11 新增了两个默认成员函数,移动构造函数和移动赋值运算符重载。如果你没有⾃⼰实现移动构造函数,且没有实现析构函数 、拷⻉构造、拷⻉赋值重载中的任意⼀ 个。那么编译器会⾃动⽣成⼀个默认移动构造。原创 2025-02-10 21:43:41 · 829 阅读 · 0 评论 -
【C++】哈希表的实现
哈希表是高效的数据结构,利用哈希函数快速映射键到表位置,实现快速查找、插入和删除。其性能依赖于哈希函数选择和装载因子管理。哈希表广泛应用于数据库、缓存、字典等场景,是计算机科学中的基础工具。通过优化哈希函数和动态调整,可进一步提升其性能。原创 2024-12-21 20:10:17 · 802 阅读 · 11 评论 -
封装红黑树实现mymap和myset
SGI-STL30版本源代码,map和set的源代码在map/set/stl_map.h/stl_set.h/stl_tree.h等⼏个头⽂件 中。通过下图对框架的分析,我们可以看到源码中rb_tree⽤了⼀个巧妙的泛型思想实现,rb_tree是实 现key的搜索场景,还是key/value的搜索场景不是直接写死的,⽽是由第⼆个模板参数Value决定 _rb_tree_node中存储的数据类型。原创 2024-12-15 21:54:43 · 805 阅读 · 8 评论 -
【C++】类和对象(上)
1.class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。2.为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。代码展示。原创 2024-08-31 18:55:33 · 912 阅读 · 7 评论 -
【C++】STL--string(下)
如果对象中管理资源,最后就会导致 多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该 资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。1. 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差 不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可 以连接字符串。//这是传的不是别名会有拷贝构造,拷贝的不就是我想要的吗所以直接交换。原创 2024-09-26 04:30:00 · 887 阅读 · 14 评论 -
【C++】模版进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性。原创 2024-10-15 16:25:42 · 883 阅读 · 25 评论 -
【C++】继承
下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)原创 2024-10-20 06:00:00 · 861 阅读 · 0 评论 -
【C++】类和对象(中)
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并 不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时,空间就开好了),⽽是对象实例化时初始化 对象。构造函数的本质是要替代我们以前Stack和Date类中写的Init函数的功能,构造函数⾃动调⽤的 特点就完美的替代的了Init。2.2构造函数的特点1. 函数名与类名相同。2. ⽆返回值。(返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)3. 对象实例化时系统会⾃动调⽤对应的构造函数。原创 2024-09-07 13:42:42 · 875 阅读 · 9 评论 -
【C++】STL--vector
/类模板只能实例化//初始化10个1//遍历i++)//范围for。原创 2024-10-03 20:16:24 · 1025 阅读 · 19 评论 -
C/C++内存管理
private:int main()//对于自定义类型,new能够调用构造初始化,malloc不会//传参构造//会调用10次默认构造//匿名//也可以直接写,进行隐私类型转换delete p1;delete p2;return 0;原创 2024-09-10 15:10:09 · 1155 阅读 · 3 评论 -
【C++】多态
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。原创 2024-10-28 18:57:54 · 1021 阅读 · 0 评论 -
【C++】二叉搜索树
场景1:⼩区⽆⼈值守⻋库,⼩区⻋库买了⻋位的业主⻋才能进⼩区,那么物业会把买了⻋位的业主的 ⻋牌号录⼊后台系统,⻋辆进⼊时扫描⻋牌在不在系统中,在则抬杆,不在则提⽰⾮本⼩区⻋辆,⽆ 法进⼊。场景2:商场⽆⼈值守⻋库,⼊⼝进场时扫描⻋牌,记录⻋牌和⼊场时间,出⼝离场时,扫描⻋牌,查 找⼊场时间,⽤当前时间-⼊场时间计算出停⻋时⻓,计算出停⻋费⽤,缴费后抬杆,⻋辆离场。2. 树不空,按⼆叉搜索树性质,插⼊值⽐当前结点⼤往右⾛,插⼊值⽐当前结点⼩往左⾛,找到空位置,插⼊新结点。原创 2024-11-01 18:24:13 · 906 阅读 · 29 评论 -
【C++】STL--string(上)
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、 快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。原创 2024-09-15 22:13:37 · 888 阅读 · 12 评论 -
【C++】STL--priority_queue和queue
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口deque的原理介绍deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与 list比较,空间利用率比较高。原创 2024-10-14 14:43:49 · 1136 阅读 · 22 评论 -
【C++】基础入门
1.定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。2.namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。3. C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。原创 2024-08-29 23:05:00 · 894 阅读 · 4 评论 -
【C++】类和对象(下)
⽆论是否显⽰写初始化列表,每个构造函数都有初始化列表;⽆论是否在初始化列表显⽰初始化,每个成员变量都要⾛初始化列表初始化;原创 2024-09-09 12:33:22 · 1042 阅读 · 7 评论 -
【C++】map和set的介绍及使用
set的声明如下,T就是set底层关键字的类型set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。⼀般情况下,我们都不需要传后两个模版参数。set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序 的。O(logN)原创 2024-11-10 16:57:42 · 1108 阅读 · 30 评论 -
C++模板初阶
class 类模板名// 类内成员定义。原创 2024-09-11 23:39:18 · 723 阅读 · 8 评论 -
【C++】STL--stack
stack的:Stack容器遵循后进先出的原则,即最后进入栈的元素最先被移出栈。原创 2024-10-14 12:42:35 · 1251 阅读 · 16 评论 -
【C++】STL--list的使用和模拟实现
list的。原创 2024-10-13 17:40:43 · 632 阅读 · 10 评论 -
AVL树实现
更新后parent的平衡因⼦等于2 或 -2,更新前更新中parent的平衡因⼦变化为1->2 或者 -1->-2,说 明更新前parent⼦树⼀边⾼⼀边低,新增的插⼊结点在⾼的那边,parent所在的⼦树⾼的那边更⾼ 了,破坏了平衡,parent所在的⼦树不符合平衡要求,需要旋转处理,旋转的⽬标有两个:1、把 parent⼦树旋转平衡。通过图7和图8可以看到,左边⾼时,如果插⼊位置不是在a⼦树,⽽是插⼊在b⼦树,b⼦树⾼度从h变 成h+1,引发旋转,右单旋⽆法解决问题,右单旋后,我们的树依旧不平衡。原创 2024-11-23 22:38:03 · 1216 阅读 · 23 评论 -
红黑树实现
红黑树的 插入 查找 验证红黑树的代码是否正确 时间复杂度原创 2024-11-30 21:13:54 · 972 阅读 · 28 评论