- 博客(26)
- 收藏
- 关注
原创 I/O多路复用之select
2、在使用select函数之前,还需要一个数据结构来保存要放到fd_set对象中的文件描述符,因为在select函数返回后,需要对数据结构中的文件描述符进行判断,判断该文件描述符事件是否就绪(判断函数:FD_ISSET(),上面有它的简单介绍),还有一个原因就是select函数返回后,没有就绪的文件描述符会被置0,等下次使用需要重新放到fd_set对象中。那么,select函数中,中间三个参数分别表示需要检测的读文件描述符集合、写文件描述符集合、异常文件描述符集合。其中第一个参数n:表示文件描述符+1。
2024-01-29 17:12:05
418
原创 位图和布隆过滤器
按照上面的思路,用一个bit位表示一个数据是否存在,一个char类型就可以表示8个数据是否存在,我们把512MB分为多个char数组,一个数组表示8个数据,当往里面插入数据时,先用这个数据除以数组个数,得到这个数据应该存在哪个数组里,再用这个数据模8(因为一个数组存8个数据),得到这个数据应该在这个数组中的哪个位置,最后把这个位置变成1(表示存在)。所以,布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可能存在,因为有些哈希函数存在一定的误判。快速查找某个数据是否在一个集合中。
2023-07-09 16:33:38
194
原创 哈希表及unordered_map、unordered_set的模拟实现
顺序结构及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须经过关键码的多次比较,顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log_2 N),搜索的效率取决于搜索过程中元素的比较次数。如果有一种数据结构,存储的数据与存储的位置呈映射关系,那么不需要进行比较直接通过对应的位置找到映射的数据。其实这种数据结构就叫哈希表或者散列表,插入的数据通过哈希函数得到对应的位置,然后数据就插入在表中对应的位置上,
2023-07-09 11:17:12
309
原创 红黑树的模拟实现
从红黑树的性质中可以看出,一条路径中,最短的情况就是全是黑色节点,最长的情况就是一红一黑。另外由于红黑树的第四条性质,告诉我们,所有根节点到叶子节点的路径中黑色节点数量相同得知,如果要插入一个新节点,那么默认情况下是插入红色节点,因为如果默认插入的是黑色的,那么有一边的黑色节点一定比另一边的数量多。{}T _data;Col _color;
2023-07-01 16:56:09
160
原创 面向对象的三大特性之一 —— 多态
编译器在执行调用虚函数这个命令时,先是到指针或引用所指向的对象空间里面找虚表,从而拿到要调用的虚函数指针,再通过虚函数指针找到函数最后调用。
2023-05-24 01:15:08
137
1
原创 面向对象的三大特性之一 —— 继承
这里是表示B类是以公开的继承方式继承到C1类中,这里我们又讲到继承方式:public:公开继承,protected:保护继承,private:私有继承。理解起来和访问限定符差不多,但是这是两个东西。接下来,我们来看看继承基类成员访问的规则:这里我们不难发现,基类的私有成员不管是通过什么继承方式,在派生类中都不可见,这里的不可见不是没有继承,而是不管是在类里面还是在类外面都不可以访问。
2023-05-21 17:58:05
115
原创 关于C++迭代器失效问题
所谓迭代器失效就是原有的空间被销毁,而继续用迭代器来进行访问,导致程序崩溃。我们以vector为例来讲解迭代器失效问题。
2023-04-29 21:27:03
328
原创 C++模板
一个非模板函数和一个模板函数同名是不会产生报错的,并且在调用函数时,如果两个函数都可以调用,那么编译器会优先调用非函数模板,如果模板可以产出一个匹配性更高的,就会选择模板。这就跟我们小时候在超市买冰棍模子,然后自己回家往模子里放料,再放冰箱,冻好后就成冰棍了,料是可乐就是可乐冰棍,料是雪碧,就是雪碧冰棍。虽然C++支持了函数重载,但是对于上面这段代码,看着还是觉得冗余,同样的功能,却要给不同类型分别写上对应的函数。这时候就体验了模板的好处了,我们只要写一个模板,然后让编译器推演类型自动生成对应的函数。
2023-04-04 23:59:45
89
原创 C++内存管理
我们先来回顾一下C语言的内存管理内存分为这几个段:栈区:非静态的局部变量都是存在栈区的,它是向下增长的。堆区:用于程序运行时动态内存分配,它是向上增长的。数据段:存在全局变量和静态变量。代码段:可执行代码、常量。而在堆区动态内存开辟的函数有malloc、calloc、realloc。malloc和calloc的区别在于,前者开辟空间不初始化,而后者会初始化为0.realloc是扩容。C++是兼容C语言的,所以,它们两个的内存管理是差不多的。
2023-04-04 16:53:10
90
原创 C++中关于类和对象的一些细枝末节
我们先来看看这段代码:这里我们发现这两个都是拷贝构造,有两种实例化的方式,但其实内部是不一样的,第一个是把1传递给a的构造函数中,之后再把a这个对象中的成员变量赋值成1。第二个是将1隐式类型转换成A类型,然后拷贝给b这个对象。如果不想发生隐式类型转换就可以用explicit这个关键字来修饰,只需要在该类的构造函数前面加上explicit:另外还补充一点:Static成员变量在学C语言时我们就知道被static修饰的变量叫静态变量,那么在类中,被static修饰的成员就叫静态成员,其中,如果
2023-04-03 22:13:07
78
原创 C++类和对象
构造函数:内置类型得自己写,自定义类型不用写。析构函数:有资源要清理就写,否则不用。拷贝构造:要深拷贝就是自己写,浅拷贝用默认生成的。赋值重载:析构要写,那赋值重载就写,否则就不需要取地址和const取地址操作符:不需要自己写。
2023-03-14 18:13:30
144
原创 C排序算法
排序的概念**排序**:就是将数据进行递增或者递减的操作。还有一个**稳定性**的概念:在一组不有序的数组中,有两个相同的数据,排完序之后,左边那个依然在左边,右边那个依然在右边。
2023-03-03 17:44:18
289
原创 关于Linux基本权限
对于文件夹来说,可读并不意味着可以直接查看该文件夹中的文件,要先有可执行权限,可执行是可以对该文件夹进行指令操作,其中就包括进入该文件夹,如果没有x(可执行)权限,那么哪怕有r(可读)权限也不能查看文件里的内容。起始权限是系统设定的,普通文件设定的起始权限默认是666,目录的起始权限默认是777,系统为了更好的控制权限,系统会有默认的权限掩码(umask)的概念。刚创建的new_dir第一个字母是d,表示它是一个文件夹,并且该目录的拥有者和所属组拥有可读可写可执行的权限,而其他人只有可读和可执行的权限。
2023-02-25 11:51:28
203
原创 【数据结构】二叉树及二叉树的基础oj练习
在数组存储中我们发现:假设一个父节点在数组中的下标为i,并且有左右子树的情况下(左右子树都不为空),那么它的左子树下标为2i+1,右子树下标为2i+2,如果2i+1>=n(n为总结点数),那么该节点没有左子树,同理,如果2i+2>=n,则该节点没有右子树。:如果一个节点含有子节点,则这个节点称为其子节点的双亲结点,如上图1是2的父节点,也是3的父节点。:具有相同父节点的子节点互称为兄弟节点,如上图中2,3都是1的子节点,2和3互为兄弟节点。:度为0的节点称为叶节点,例如上图中的4,5,6,7都是叶节点。
2023-01-09 14:59:13
530
原创 栈和队列、及Leetcode的循环队列和用栈模拟实现队列、用队列模拟实现栈
栈,是一种特殊的线性表,只能在固定的一端进行增加删除数据,进行数据操作的一端叫做栈顶,另一端叫栈底,栈中的数据元素遵循后进先出LIFE(last in first out)的原则。对栈的数据操作,其中栈顶放入数据叫做压栈,从栈顶出数据叫做出栈。栈的定义二、队列1、队列的概念它和栈差不多,只不过队列的数据操作是一头放入数据,另一头出数据,放数据的那一头叫队尾,出数据的那一头叫对头,队列的数据元素遵循先进先出FIFE(first in first out)的原则。队列的定义三、Leetcod
2022-12-05 16:10:39
318
原创 LeetCode链表习题解析
还是一样,设甲速度为n,乙速度为2n,环的周长为c,这次设环的第一个节点到相遇点的距离为n,直线的距离为l,则甲到相遇点走的路程是l+n,乙走的路程是l+k×c+n(其中k是圈数),时间相同,乙速度是甲的2倍,所以,2(l+n)=l+k×c+n,结果为l=k×c-n,得出,甲从起点出发,乙从相遇点出发,第一次相遇的点就是环的第一个节点。再回到这个题目中,我们可以创建两个指针,慢的指针一次走一步,快的指针走两步,这样,如果相遇则一定是环,否则快的指针一定会先走到NULL。所以,和练习一一样,用快慢指针来走。
2022-11-16 16:17:40
161
原创 关于预处理指令的讲解
return 0;}在预编译期间,系统会自动把代码里的MAX替换成#define定义的MAX的值,就变成了:x + 2。这里要注意一点:定义的标识符后面最后不要写分号,可能会有bugint main(){int x = 3;x += MAX;return 0;}这个代码走进if语句,执行x += MAX,而(MAX == 2);,替换之后就变成了(x += 2;;
2022-10-17 21:30:15
250
原创 C语言文件相关操作
首先,我们要知道一个东西叫文件类型指针,简称“文件指针”,可以理解为是存放文件的指针,每个被使用的文件都会在内存中开辟出一个空间,叫文件信息区,用来存放文件的信息,比如名字,状态,当前位置。
2022-10-15 11:07:40
302
原创 整形数据类型在内存中的储存及大小端的介绍
计算机中的整数有三种2进制表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位正数的原、反、补码都相同。负整数的三种表示方法各不相同。...
2022-08-09 22:26:22
1871
10
原创 扫雷游戏的实现
其实跟三子棋一样,先分成3个模块:一、game.h 用来声明头文件和自定义函数的。二、game.c 用来实现自定义函数的。三、test.c 用来设计程序运行的逻辑。
2022-08-08 18:09:58
1109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅