自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 c++STL——哈希表封装:实现高效unordered_map与unordered_set

本文介绍了如何使用哈希表封装C++中的unordered_map和unordered_set容器。首先,文章回顾了哈希表的实现原理,并指出C++标准库中的这两个容器底层也是基于哈希桶实现的。接着,文章详细讨论了如何改进哈希表的底层框架,特别是通过泛化数据类型和使用模板参数KeyOfT来提取关键字,从而支持unordered_map和unordered_set的封装。文章还探讨了哈希表迭代器的实现,指出哈希桶的迭代器是单向的,因为哈希桶底层使用的是单链表。迭代器的实现需要包含指向节点的指针和指向哈希表的指

2025-05-14 22:13:22 721 1

原创 c++进阶——哈希表的实现

本文介绍了哈希表的基本概念及其实现方式。哈希表通过哈希函数将关键字映射到存储位置,以实现快速查找和插入。C++ STL库中的unordered_set和unordered_map基于哈希表实现,与基于红黑树的set和map相比,哈希表在搜索和插入效率上更高,但无序。哈希表的关键在于将关键字转化为整型并通过哈希函数映射到表中,这可能导致哈希冲突。解决冲突的常用方法有开放定址法和链地址法。开放定址法通过线性探测等方式解决冲突,而链地址法则通过链表或红黑树处理冲突。哈希函数的选取对哈希表的性能至关重要,常见的哈希

2025-05-13 23:18:04 881 2

原创 c++STL——红黑树封装set与map:深入源码解析

c++STL——红黑树封装map和set

2025-05-09 02:39:15 795 2

原创 c++进阶——红黑树的实现

c++进阶——红黑树的实现

2025-05-08 19:28:37 669 1

原创 c++进阶——AVL树主要功能的模拟实现(附带旋转操作讲解)

c++进阶——AVL树

2025-05-05 14:18:12 872

原创 c++STL——set和map的使用

这里的T其实就是key,这里写的确实会令人误解。因为本质上二叉树对应的这些关联式容器都是以key作为关键字来进行查找、删除等操作的。这里我们跟着看一下文档就好了。如果到后期自行实现了改过来就好。这个Compare模板参数类型给了一个less< T >,这是干什么用的呢?这个是用来规定搜索树的规则的。我们默认的规则是对于一个搜索树,右子树的key应该比根节点的大,左子树的key比根节点要小。默认传入的是小于的比较逻辑。但是如果想要反过来,需要传入大于的比较逻辑。比较逻辑本质是仿函数。

2025-05-04 15:53:27 650 3

原创 c++进阶——BinarySearchTree(无相同值)的简单实现

c++进阶——二叉搜索树

2025-04-29 15:16:29 595 3

原创 c++进阶——多态

c++进阶——多态

2025-04-28 13:31:40 731 1

原创 c++进阶——类与继承

c++继承

2025-04-25 21:45:13 747 1

原创 c++概念——模板的进阶讲解

c++模板概念进一步讲解

2025-04-23 23:39:18 811 4

原创 c++STL——stack、queue、priority_queue的模拟实现

c++STL——stack、queue、priority_queue的模拟实现

2025-04-22 13:38:53 1129 4

原创 Linux——入门常用基础指令

Linux是一个开源的操作系统,市面上有很多种版本。我们可以根据自己的需求进行选择。当然在学习的初期我是选择了Centos 7.6进行学习。我们大部分人的电脑装的都是Windows系统,Linux是另外一个操作系统。我们可以选择将系统重装为Linux,但是这个代价太大了。还可以选择使用虚拟机,但是当前知识储备有限,使用虚拟机难度较大。还可以选择使用云服务器,并且使用Xshell软件进行登录云服务器。这个代价并不是很大,所以我选择了这个。需要注意的是:XShell 下的复制粘贴。

2025-04-21 19:39:56 955

原创 c++STL——list的使用和模拟实现

c++STL——list的使用和模拟实现

2025-04-20 21:47:40 663 2

原创 c++STL——vector的使用和模拟实现

对于STL中各类容器的学习其实是很相似的,因为c++的封装性。虽然是不同的容器,但是c++标准库在实现的时候是对各类的容易实现了一些一样的接口,我们只需要关注其封装的接口的使用即可。所以各类容器的操作是很类似的。而对于vector其实是一个类模板,其底层的实现本质还是顺序表。只不过与string的底层实现是略有区别。更大的不同是vector中存储的元素不仅仅是一些内置类型,也可以是类,如string,甚至是vector类。

2025-04-17 21:38:42 641

原创 Leetcode——137 260找出只出现一次的数

算出数组中所有数字第i位1的出现次数(Onenum),如果是3的倍数,那么ans的这一位就是0,正好是Onenum取余3的结果。如果按照刚刚的思想来分类也是不太可能的,因为分类的情况下,可能出现一次的数据和出现三次的数据会被分到一块,这是很难办的。以此类推,我们很容易得知:对于整个数组来说,第i位出现的0和1的次数一定是一个为3的倍数,一个比3的整数倍还多一个。这题对于引入的例子也是修改了一点:只有一个数字出现一次,其他的会出现3次,找出只出现一次的数据,并且要求线性时间复杂度,常数级别空间复杂度。

2025-04-14 23:36:42 803

原创 c++STL——string学习的模拟实现

c++ string的学习和模拟实现

2025-04-13 17:48:06 583

原创 Leetcode12 13——罗马数字与整数之间的转换

2.如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。你不能多次附加 5 (V),50 (L) 或 500 (D)。1.如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。

2025-04-10 15:28:39 898

原创 Leetcode 69——不使用sqrt函数情况下求平方根整数部分(暴力求解法和二分查找法)

时间复杂度为O(LogX),其实很好理解,如果x比较大,那么跑的次数会非常接近刚刚的那个数46431,其实也就是x的平方根整数部分,那效率还是比较低的。就比如我要找10的平方根,从10开始找才是更快的,从50000开始为上界那就不太行了。所有类型的数据最大的平方根也不超过50000,所以我们做一个规定,如果传入的x小于等于50000,就让上界为x,反之为50000。就比如找90000的平方根,暴力查找要找300次,而二分查找只需要14次(大致计算),这个效率差是非常大的。很明显,这个思路是可行的。

2025-04-10 13:25:25 823

原创 c++概念——泛型编程、模板的介绍

c++类模板的概念

2025-04-08 14:37:49 1199

原创 c++概念—内存管理

c++内存管理

2025-04-07 19:06:12 1135

原创 c++概念——类和对象补充概念

c++ 类与对象的最后部分概念补充

2025-04-06 03:43:23 974

原创 c++概念——类的默认成员函数及实现日期类

c++类和对象默认成员函数的概念加上日期类实现对以上内容的理解

2025-04-05 01:55:44 926

原创 c++概念——类和对象的初步认识

c++类和对象初步认识

2025-04-04 01:51:11 814

原创 c++概念——入门基础概念

c++入门概念

2025-04-02 02:12:29 1026

原创 c语言数据结构——八大排序算法实现

c语言实现八大排序算法

2025-04-01 00:41:32 1626

原创 c语言数据结构——二叉树的实现与递归

二叉树实现与递归

2025-03-28 02:08:19 849

原创 c语言数据结构——二叉树概念和堆的实现应用

树概念和堆的实现应用

2025-03-26 01:48:52 1310

原创 c语言数据结构——双向带头循环链表

双向带头循环链表的实现

2025-03-25 12:07:13 951

原创 c语言数据结构——栈与队列的实现及应用

栈和队列的实现和应用

2025-03-23 21:07:24 775

原创 c语言数据结构——单向不带头不循环链表的实现

单向不带头不循环链表的实现

2025-03-18 14:58:39 1398

原创 c语言数据结构——顺序表的实现

顺序表的实现

2025-03-16 23:51:19 932

原创 c语言数据结构——Leetcode题目:带环链表 AND 随机链表复制

c语言之数据结构 介绍两个算法以及背后原理的证明

2025-03-14 00:14:01 1369

原创 c语言——编译链接及预处理

c语言之编译链接 还有详细讲解预处理部分知识

2025-03-11 17:15:28 1271

原创 c语言——文件操作

c语言文件操作

2025-03-09 23:25:03 936

原创 c语言之动态内存管理

栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等。堆区(heap):⼀般由程序员分配释放, 若程序员不释放,程序结束时可能由OS(操作系统)回收。分配⽅式类似于链表。数据段(静态区):(static)存放全局变量、静态数据。程序结束后由系统释放。

2025-03-04 19:41:56 740

原创 c语言——简单贪吃蛇的实现

丐版贪吃蛇的实现

2025-03-04 15:02:46 1334 1

原创 c语言自定义类型——结构体、联合、枚举

c语言自定义类型讲解

2025-03-02 22:32:32 796

原创 c语言之数据在内存中的存储

源码:源码就是数据的二进制数字。这里我们要知道的是,数字有正负之分,所以在内存中,对于有符号数字,数字的最高比特位是符号位。1代表负数,0代表整数。int a=1;int b=-1;正数的源码、反码、补码是一致的a的源码 00000000 00000000 00000000 00000001b的源码 10000000 00000000 00000000 00000001反码:反码就是数据的源码除符号位以外,其他取反。

2025-03-01 01:36:12 1031

原创 部分库函数的应用以及模拟实现

c语言部分库函数的讲解以及模拟实现

2025-02-25 18:32:12 994

原创 c语言学习之————对指针的理解

指针的学习,包含了底层逻辑以及图解

2025-02-22 19:11:52 950

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除