- 博客(72)
- 收藏
- 关注
原创 用哈希表封装myunordered_map和 myunordered_set(沉淀中)
SGI-STL30版本中未包含C++11标准的unordered_map和unordered_set,而是通过非标准的hash_map和hash_set实现哈希表功能。分析源码可见,这两个容器复用同一个hashtable模板,hash_set传递双key参数,hash_map传递pair<const key, value>。在模拟实现时,通过自定义MapKeyOfT和SetKeyOfT仿函数来提取键值,解决哈希表中不同类型数据的键值获取问题。实现框架包含insert功能和迭代器支持,其中迭代器采
2025-06-10 17:32:22
1009
原创 哈希表实现(沉淀中)
哈希是一种通过哈希函数将关键字映射到存储位置的数据组织方式,其核心在于减少哈希冲突并提高查找效率。常见的哈希函数包括直接定址法(适用于关键字范围集中的场景)、除留余数法(推荐使用质数作为表大小以避免冲突)以及乘法散列法和全域散列法(增加随机性)。哈希冲突不可避免时,可通过开放定址法(如线性探测、二次探测)或链地址法解决。负载因子(N/M)影响冲突概率和空间利用率,需合理权衡。实际应用中,哈希函数设计需考虑关键字均匀分布,而冲突处理策略则直接影响哈希表性能。
2025-05-28 22:43:45
689
原创 unordered map和unordered set的使用(沉淀中)
摘要:本文主要介绍了C++中unordered_set和unordered_map的使用方法及其与set/map的区别。内容涵盖三部分:1) unordered_set的基本介绍和模板参数说明;2) unordered_set与set在key要求、迭代器特性和性能(O(1) vs O(logN))上的差异;3) unordered_multiset/unordered_multimap支持key冗余的特性。通过性能测试代码对比了两种容器的操作效率,并指出unordered系列容器采用哈希表实现,迭代器遍历无
2025-05-28 22:42:32
985
原创 python期末速成
本文介绍了Python编程基础知识和常见操作,主要包括以下内容: 基本指令与数字计算:展示了变量赋值、输入输出、基本算术运算(加减乘除、取模等)和数学函数(pow、abs、round等)的使用方法。 字符串操作:演示了字符串大小写转换、切片拼接、格式化输出等功能。 控制结构:详细讲解了if条件语句、while循环和for循环的使用,包括break、continue等控制关键字。 典型算法示例: 多项式求和(如计算1-100偶数之和) 阶乘计算 复合运算问题(如猴子吃桃问题) 双重循环应用(如鸡兔同笼问题)
2025-05-25 19:34:32
344
原创 封装红黑树实现mymap和myset(沉淀中)
本文分析了SGI-STL30版本中map和set的实现框架,其核心是基于红黑树(rb_tree)的泛型设计。map和set通过模板参数控制红黑树节点存储的数据类型,set存储键(key),map存储键值对(pair<const key, T>)。源码通过KeyOfValue仿函数实现键的提取,使得同一红黑树结构能同时支持set和map。文章还给出了模拟实现方案:在map和set中分别定义MapKeyOfT和SetKeyOfT仿函数,传递给RBTree用于键值比较。这种设计体现了STL容器复用和数
2025-05-25 19:33:37
961
原创 AVL树实现(沉淀中)
AVL树是一种自平衡二叉搜索树,通过控制左右子树的高度差(不超过1)来保持平衡。它得名于其发明者Adelson-Velsky和Landis。AVL树通过引入平衡因子(右子树高度减去左子树高度)来监控树的平衡状态。插入节点时,AVL树首先按照二叉搜索树的规则插入,然后更新从新节点到根节点的平衡因子。如果更新过程中发现不平衡,则通过旋转操作(左旋、右旋、左右双旋、右左双旋)来恢复平衡。旋转操作不仅使树重新平衡,还降低了子树的高度,确保不会影响上层节点的平衡。AVL树的高度始终保持在O(logN),使得增删查改操
2025-05-17 17:19:33
695
原创 红黑树实现(沉淀中)
红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加颜色标记(红或黑)并遵循四条规则来确保树的平衡性。这些规则包括:每个节点非红即黑、根节点为黑、红色节点的子节点必须为黑、从任一节点到其所有空子节点的路径包含相同数量的黑色节点。红黑树通过这些规则确保最长路径不超过最短路径的两倍,从而保持近似平衡,其增删查改操作的时间复杂度为O(logN)。红黑树的实现包括节点结构定义、插入操作(涉及变色和旋转)、查找操作以及验证规则的过程。插入操作根据父节点和叔节点的颜色分为不同情况处理,确保树的平衡性。红黑树相较于AVL
2025-05-17 17:18:06
880
原创 异常(沉淀中)
异常处理是编程中用于管理运行时错误的一种机制,允许程序在检测到错误时,将错误信息传递给特定的处理模块进行处理,从而实现错误的检测与处理分离。与C语言中的错误码相比,异常通过抛出对象的方式提供更全面的错误信息。异常的抛出和捕获过程涉及栈展开,即程序在抛出异常后,会沿着调用链查找匹配的catch子句,若未找到匹配项,则程序终止。异常处理中,允许从派生类向基类类型的转换,便于捕获多种异常。此外,异常可以重新抛出,允许在某些情况下对错误进行分类处理,并将无法处理的异常传递给外层调用链。通过异常机制,程序能够更灵活地
2025-05-11 23:00:03
1047
原创 进程(沉淀中)
本文主要介绍了计算机进程的基本概念及其管理机制。首先,通过冯诺依曼体系结构阐述了计算机硬件的基本组成和数据流动方式,强调了CPU与内存之间的交互。接着,探讨了操作系统的核心功能,即作为软硬件资源的管理者,通过系统调用为用户程序提供执行环境。操作系统通过描述和组织被管理对象来实现高效管理,其中进程控制块(PCB)是描述进程属性的数据结构。在Linux系统中,PCB表现为task_struct,包含进程的标识符、状态、优先级等信息,并通过链表形式组织所有进程。最后,文章介绍了如何查看和管理进程,包括通过系统调用
2025-05-11 22:58:48
94
原创 Linux环境基础开发工具使用(沉淀中)
(1)在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.(2)但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.(3)软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.
2025-04-25 14:46:55
226
1
原创 Linux 常见指令2(沉淀中)
(1)目录的可执行权限是表示你可否在目录下执行命令。(2)如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)(3)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限(4)所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。以上就是权限的全部内容了,非常重要,大家可以反复观看,进行理解使用。
2025-04-25 14:46:04
68
原创 map和set的使用
set的声明如下,T就是set底层关键字的类型• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序(左根右),所以是有序的。O(logN)
2025-04-06 12:12:24
1199
原创 二叉搜索树(沉淀中)
以上就是二叉搜索树的全部内容了,重点在删除部分,可以反复观看, key/value搜索场景也很重要,在生活中非常的常见。喜欢博主写的内容可以一键三连支持博主。
2025-04-06 12:11:42
936
原创 多态(沉淀中)
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。以上就是多态的全部内容,喜欢本篇内容,可以一键三连支持博主。
2025-04-03 12:34:26
1105
原创 模版进阶(沉淀中)
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。本质:不存在链接要去找的问题,定义就在.h,在编译的时候就已经确定地址了。a.h//函数模版【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2025-04-03 12:33:36
979
原创 stack和queue(沉淀中)
1#include<stack>//后进先出#include<queue>//先进先出int main()st.push(1);st.push(2);st.push(3);st.push(4);while (!st.pop();return 0;queue.h#include<queue>//先进先出public:queue() {}private://咱们实现用到的不是listqueue.cpp1//#include<stack>//后进先出。
2025-04-02 15:22:39
990
原创 继承(沉淀)
继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。1//普通public://进入校园等身份验证//....//学习//..protected://姓名//地址//电话//年龄int _stuid;// 学号。
2025-04-02 15:21:49
894
原创 vector(沉淀)
vector参考文献以上就是vector的全部内容了,写了好多天,一次没看懂,可多次阅读文章。喜欢博主写的内容,可以一键三连支持博主。
2025-03-18 23:23:41
904
1
原创 String类(沉淀中),非常详细,进来看就是赚到!!!!!
以上就是string的全部内容了,关于string的使用和模拟实现,深浅拷贝较难,请大家多次阅读文章。喜欢博主写的文章可以一键三连。
2025-03-09 16:05:34
1101
原创 1005.k次取反后最大化的数组和(贪心)思路解析+源码
以上就是1005.k次取反后最大化的数组和(贪心)思路解析+源码的全部内容了,喜欢博主写的文章可以一键三连支持博主。
2025-02-24 23:38:28
65
原创 专题三 二分查找算法,超详细快来看啊!!!!
查找左区间查找右区间口诀:当下面出现-1的时候,上面就+1 ,分类讨论的代码,就提论题即可这就是专题三 二分查找算法的全部内容了。喜欢博主写的内容可以一键三连支持博主!!!
2025-02-23 14:43:18
1423
原创 走向STL(沉淀中)
是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。以上就是走向STL全部内容了,喜欢这篇博客的可以一键三连,支持博主!!!!
2025-02-22 00:06:52
640
原创 122.买股票的最佳时机II(贪心)源码+详细解析
以上就是122.买股票的最佳时机II(贪心)源码+详细解析的全部内容了,喜欢博主写的这篇文章,可以一键三连支持博主。有啥问题在评论区留言,博主会及时回应。
2025-02-20 01:35:55
210
原创 300.最长递增子序列(动态规划)
以上就是300.最长递增子序列(动态规划)的全部内容了。后续还有300.最长递增子序列(贪心算法),注意up主更新时间。喜欢博主的可以一键三连,支持博主。
2025-02-18 01:24:56
345
原创 初触模板(沉淀中)
class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;以上就是摸板的全部内容了,喜欢博主写的内容可以一键三连,支持博主。欢迎大家在评论区留言。
2025-02-16 21:54:15
705
原创 如何学好内存管理,快来看这篇文章吧!!!
int main()//new/delete 和malloc/free最大区别 new/delete 对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;//内置类型是几乎一样的free(p3);delete p4;free(p5);return 0;
2025-02-16 21:53:30
627
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人