- 博客(81)
- 收藏
- 关注
原创 【C++】哈希的应用——布隆过滤器
布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。相比于传统的 List、Set、Map 等数据结构,此种方式不仅可以提升查询效率,也可以节省大量的内存空间。
2023-04-19 13:09:48
975
33
原创 【C++】哈希的应用——bitset(STL)位图
我们在判断一个数据是否在给定的整形数据中,结果只有在或者不在这两种状态,那么就可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。这里我们采用直接定址法的哈希,用一个比特位标识映射值在不在,这就是位图。
2023-04-17 19:19:17
2199
62
原创 【C++】STL——用一个哈希表封装出unordered_map和unordered_set
根据先前对unordered_map和unordered_set的学习,我们得知其底层是借助哈希表来实现的,接下来我们会使用上篇博客实现的开散列哈希表来模拟实现unordered_map和unordered_set
2023-04-16 19:44:51
749
47
原创 【C++】哈希
unordered系列的关联式容器之所以效率比较高,是因为其底层使用了哈希结构。今天我们学习哈希,并模拟实现开散列哈希表和闭散列哈希桶。
2023-04-13 19:57:00
717
41
原创 【C++】STL——unordered_map和unordered_set的介绍和使用
unordered_set和unordered_map的基本使用
2023-04-12 22:18:07
445
11
原创 【C++】STL——用一颗红黑树封装出map和set
我们都知道set是K模型的容器,而map是KV模型的容器,但是它俩的底层都是用红黑树实现的,上篇博文中我们模拟实现了一颗红黑树,接下来将对其进行改造,继而用一颗红黑树封装出map和set。本质上map和set其内部的主要功能都是套用了红黑树现成的接口,只是稍作改动即可。
2023-04-10 20:51:50
775
40
原创 【C++】红黑树
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍(最长路径不超过最短路径的2倍),因而是接近平衡的。
2023-04-07 15:13:59
681
55
原创 【C++】AVL树
今天我们学习AVL树,这里我们实现的AVL树为KV模型,自然节点的模板参数有两个,并且节点定义为三叉链结构(左孩子,右孩子,父亲),在二叉链表的基础上加了一个指向父结点的指针域,因为在某个子树插入节点后,如果这课子树的高度发生变化,那么子树的平衡因子需要进行调整,可能需要一路向上调整,比较麻烦,所以这个地方就引入了三叉链结构,使得即便于查找孩子结点,又便于查找父结点。接着还需要创建一个变量_bf作为平衡因子(右子树 - 左子树的高度差)。最后写一个构造函数初始化变量即可。
2023-04-05 13:32:41
606
32
原创 【C++】STL——set、multiset、map、multimap的介绍和使用
set、multiset、map、multimap的介绍和使用
2023-04-03 20:12:17
387
11
原创 【C++】多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。在继承中要构成多态还有两个条件:1.必须通过基类的指针或者引用调用虚函数2.被调用的函数必须是虚函数(virtual),且派生类必须对基类的虚函数进行重写(函数名、返回值、参数均相同 + 虚函数)
2023-03-29 19:12:14
523
33
原创 【C++】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用(避免设计重复)的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
2023-03-27 19:23:17
640
4
原创 <Linux>进程地址空间
我们之前学习语言的时候,都会学习程序地址空间,但是这个程序地址空间并不是物理内存的地址空间,而是进程地址空间,我们来学习一下。
2023-03-23 00:12:23
475
19
原创 <Linux>进程概念
进程通常被认为是程序的一个执行实例,正在执行的程序等,或者进程就是被加载到内存中的程序,或者被运行起来的程序就叫做进程内核观点:担当分配系统资源(CPU时间,内存)的实体。严格意义上的进程 = 进程对应的磁盘代码(可执行程序代码) + 该进程对应的内核数据结构(task_struct)。今天我们来学习进程!!!
2023-03-17 00:33:50
1381
39
原创 【C++】模板进阶
模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2023-03-15 00:40:56
565
30
原创 【C++】STL——list的模拟实现
这里强调下,因为list的特殊性,其本质是带头双向循环链表,我们可以通过list的模拟实现中迭代器的模拟实现理解面向对象:封装性
2023-03-01 15:07:25
573
8
原创 <Linux>进度条小程序和git使用详解
我们之前已经学完了Linux基础开发工具,下面我们写一个进度条练练手。同时学习如何在Linux下使用命令行操作git
2023-01-15 13:16:19
1349
24
原创 <Linux> Linux项目自动化构建工具—make&makefile的使用
今天我们来学习Linux环境基础开发工具的最后一个Linux项目自动化构建工具make&makefile的使用
2023-01-14 19:21:51
928
12
原创 【C++】STL——priority_queue的介绍和使用及模拟实现
优先级队列是一种适用范围广泛的容器适配器,其底层接近于数据结构的堆,优先进符合条件的数据。
2022-12-22 20:58:20
659
14
原创 【C++】STL——stack和queue的介绍与使用及模拟实现
今天我们来学习stack和queue,这俩并不算容器,虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装。接下来,我们来学习一下它们。
2022-12-19 22:47:27
635
14
原创 【C++】STL——vector的模拟实现
上篇博客我们练习了vector的常用接口,但是我们知道只会使用接口,不了解底层,只能是只见树木,不见深林。我们只有熟悉底层,才能更好的使用STL的容器,下面我们来实现vector。
2022-12-08 22:35:17
726
23
原创 【C++】string类的模拟实现
string类的常用接口我们虽然会用,但是这还不够,我们需要熟悉string类的底层,学会模拟实现string类。
2022-11-27 20:10:39
268
33
原创 【C++】string类的常用接口
C++为了解决C语言中字符串难以使用的问题,引入了string类,可以方便、简单、快捷的使用string类去解决字符串的问题。
2022-11-25 19:07:30
288
27
原创 <Linux> shell运行原理及Linux权限的理解
Linux严格意义上来说是一个操作系统,我们称之为 “核心 (kernel)”,即Linux内核;但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel? Linux中是如何管理权限的?接下来让我们去学习。
2022-11-05 23:52:57
1379
86
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人