自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++虚函数调用规则

g++编译器,当引用基类对象时,调用虚函数不涉及到虚函数表指针的访问,引用派生类对象时,调用虚函数涉及到虚函数表指针的访问。通过对象直接调用虚函数,不涉及到虚函数表指针的访问(g++,MSVC,clang++测试结果一致)使用指针调用虚函数时,均涉及到虚函数表指针的访问(在g++和clang编译器下表现相同)clang编译器,不管引用的是基类对象还是派生类对象,调用虚函数都要访问虚函数表指针。clang编译器:涉及到虚函数表指针的访问。g++编译器:不涉及虚函数表指针的访问。:使用派生类的引用调用虚函数。

2024-03-02 15:30:06 366

原创 二进制和位运算

如果数据在内存中二进制表示形式的最高位为0,按照一般正数的逻辑进行解释,如果最高位为1,表示该数据为负数,然后将二进制表示取反后在加1得到数值大小,例如数据在内存中显示为11111111’11111111’11111111’11111101,按照规则将其解释为-3。虽然在计算过程中出现了溢出,但是因为负数巧妙的设计,计算结果依然是正确的,使用正数加上负数时也有这样的效果,虽然计算过程中可能出现溢出,但是只要保证自己的调用得到的结果不溢出,计算机依旧可以正确的计算出来。&、&&、|、||的区别。

2024-01-11 12:17:07 413

原创 IO多路转接

系统调用selectpollepoll事件集合通过fd_set设置关心事件,返回时也是通过fd_set获取就绪事件,fd_set不可重用通过events和revents分别表示关心事件和就绪事件,pollfd结构可重用通过epoll_ctl设置关心事件,通过epoll_wait检测eventpoll的rdllist是否为空,从而获取就绪事件索引就绪文件描述符的时间复杂度O(N)O(N)O(1)最大支持的文件描述符个数1024使用ulimit -a查看使用ulimit -a查看。

2023-10-05 19:46:28 822

原创 计数排序与基数排序

按照个位进行排序,对于数字7,个位为7,由于个位数<=7的数据数量是4,所以7直接放到help数组中下标为3的位置,此时原序列中的7已经放到help数组中,原序列中个位数<=7的数据数量减少一个,变为3,以此类推,直到原序列中的数据全部按照规则转移到help数组中,此时help数组中的数据就是按照位排序好的数据。若需要排序的数字不是10进制,只需要修改BASE即可,其它思路一致,例如需要排序的数字是16进制,那么counts数组的大小定为16即可,统计每一位在0~f的数量,依然使用前缀分区技巧。

2023-09-18 21:47:19 249

原创 动态规划-货币问题

有重复子过程的递归可以尝试将其改写为动态规划,这样会使得解决问题的时间复杂度大大减小,动态规划的状态转移方程其实就是递归的尝试过程,dp表的初始化就是递归的出口,dp表的填表顺序取决于尝试策略,在填表时,若确定dp表的一个位置需要使用for循环,应该尝试分析递归过程和位置依赖,以确定是否可以做进一步的优化。

2023-09-17 18:29:37 899

原创 哈夫曼树与哈夫曼编码

在构建哈夫曼树的过程中,使用了堆,因为我们每一次都需要选择最小的2个节点进行合并,并且这2个节点不能是已经选择过的,如果采用遍历操作,时间复杂度为O(N),使用堆可以加速这一过程。可以看出,出现频率越高的字符对应的哈夫曼编码越短,并且不存在任意一个字符的编码为另外一个字符的编码前缀,因为这些字符都是对应的叶子节点,因此哈夫曼编码在进行编码与解码时不存在歧义。规定向左的边码值为0,向右的边码值为1,那么’D’的哈夫曼编码为0,'A’的哈夫曼编码为100,'B’的哈夫曼编码为101,'C’的哈夫曼编码为11。

2023-09-01 14:53:11 190

原创 C语言memcpy与memmove

memmove函数与memcpy函数功能类似,不过memmove函数在数据拷贝这件事情上考虑的更加周全,当src>dst时,memmove的拷贝策略是从前往后,当src<dst时,memmove的拷贝策略是从后往前。若memcpy的实现方式如上,在从前向后进行拷贝的时候会存在数据覆盖的问题,那么系统的memcpy函数是否解决了数据覆盖的问题呢?在比较新的C语言标准中,memcpy函数解决了数据覆盖的问题,不过在早期C语言标准中,解决类似的问题需要使用memmove函数。memcpy函数原型。

2023-08-31 22:15:23 220

原创 高阶数据结构-图

使用并查集实现Kruskal算法时,返回值为所有选中的边,根据边即可获取最小生成树的所有信息,需要注意的是,虽然Kruskal算法适用于无向图,但返回值为有向边,这并不影响最小生成树的结构,因为有向边中包含from点、to点、权值。二维数组中每一个一维数组的第一个元素表示from点,第二个元素表示to点,最后一个元素表示边的权值,二维数组可以表示图,但是在实现图的相关算法不具备通用性,可以将其转化已知结构。图中A到B的最短路径是5,A到C的最短路径是先通过B在达到C,为15。

2023-08-16 21:16:57 295

原创 Boost搜索引擎项目

Boost搜索引擎

2023-04-05 23:11:04 413

原创 Linux进程信号

Linux进程信号知识总结

2023-02-15 11:44:31 157

原创 Linux多线程

Linux多线程知识汇总

2023-02-15 11:34:37 211

原创 c++虚继承

c++虚继承

2022-12-27 17:00:39 556

原创 迭代器萃取

迭代器萃取

2022-12-10 17:58:57 166

原创 Linux共享内存

Linux共享内存

2022-12-10 17:43:50 1195 1

原创 匿名管道和命名管道

Linux管道通信

2022-12-06 17:53:09 730

原创 Linux文件系统与软硬链接

Linux文件系统与软硬链接

2022-12-03 21:58:43 161

原创 函数栈帧的创建与销毁

函数栈帧的创建与销毁

2022-11-27 22:36:56 1018

原创 哈希的思想及其应用

哈希的思想及其应用

2022-11-17 22:47:55 1599

原创 红黑树的变色和旋转

红黑树插入结点的变色和旋转

2022-11-09 16:15:35 379

原创 C++多态

C++多态

2022-11-04 19:39:41 148

原创 STL中map和set的基本使用

c++STL中set和map的使用

2022-11-01 12:29:52 288

原创 二叉搜索树

二叉搜索树

2022-10-29 23:56:21 703

原创 c++中的继承

C++中的继承

2022-10-25 19:46:29 423 1

原创 c++STL中的list

c++STL中的list容器

2022-09-30 23:49:12 978

原创 Linux中的进程

Linux中的进程

2022-09-28 15:02:55 588

原创 vector的迭代器失效、深拷贝和模拟实现

vector的迭代器失效,深拷贝和模拟实现

2022-09-24 22:52:55 237

原创 Linux进程替换

进程替换

2022-09-24 17:06:38 476

原创 进程的基本理解

Linux中进程的基本理解

2022-09-16 23:30:28 674

原创 vim,gccg++,gdb的基本使用

vim,gcc/g++,gdb的基本使用

2022-09-16 22:29:19 391

原创 c++内存管理与模板初阶

c++内存管理与模板

2022-09-08 17:57:22 335

原创 c++类和对象细节汇总

c++类和对象的细节

2022-09-03 14:29:07 35353

原创 c++中的构造函数

c++构造函数

2022-08-12 20:00:53 438

原创 c++中的this指针

c++this指针

2022-08-12 19:41:13 467

原创 c语言malloc,calloc,realloc函数介绍

malloc,calloc,realloc动态内存管理函数的出现解决了在某些c语言标准中不能使用变长数组的问题这三个函数的使用需要头文件stdlib.h,这些函数开辟的空间在堆区,系统不会自动释放,需要手动管理释放。malloc:向内存申请一块空间,不初始化该空间参数:想要开辟的空间的大小返回值:返回该空间的起始地址使用举例:int main(){ int* p = (int*)malloc(5 * sizeof(int)); if (p == NULL) retur..

2022-05-01 20:25:20 1301

原创 vim的基本快捷键及其基本配置

vim一键配置链接:curl -sLfhttps://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh-o ./install.sh && bash ./install.sh在命令行直接输入链接按回车即可自动下载配置后的效果如图:vim命令模式的快捷键:1.shift+4:定位到行尾2shift+6:定位到行首3.shift+g:定位到最后一行4.gg:定位到第一行5.n+shift+g:定位到第n行..

2022-04-01 22:47:34 1100 2

原创 Linux文件与shell的基本概念

Linux文件权限

2022-04-01 22:18:01 12736

原创 Linux基本命令

Linux基本命令前言本文章主要讲解Linux基础知识及其指令,富有多张配图帮助理解一、Linux中的用户Linux中有2类用户,一种是普通用户,一种是root用户,普通用户可以有多个,但是root用户只有一个,root用户和普通用户最大的区别在于权限,root用户拥有比普通用户更高的权限,如图,图中普通用户slowst

2022-04-01 21:21:17 2226

原创 strcpy函数的实现

1.实现思路strcpy函数是字符串拷贝函数,参数为2个字符串的首地址即strcpy(char* destination,const char* source),我们要把源头的字符串拷贝到目的地里面去,目的地字符串要被源头字符串替换,所以目的地字符串应该是可以修改的,而源头的字符串我们不希望被修改,所以用const修饰。这样的好处是如果我们操作失误导致源头字符串被修改,编译器会直接报错实现这个函数的思路是把源头的字符一个个的去替换目的地的字符,包括源头字符的’\0’也拷贝过去,注意目的地要有足够的空间

2022-03-10 13:33:49 13271

原创 strlen函数的三种实现

strlen函数

2022-03-10 13:08:09 1171

原创 qsort函数的使用及其实现

qsort函数

2022-03-09 01:04:20 4972

空空如也

空空如也

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

TA关注的人

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