自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二分查找理解

5.接着还有一个情况,那就是nums1为空,或者是nums1的值全部比nums2还要小这种情况,因此我们二分nums1,需要能取到m这个值,同时用m这个下标来标识一个最大值,这样好处就是取右边最小值不会有影响,同时我们要取mid1-1的值,那么mid1是0了呢?1.假设mid1是nums1的一个数的下标,mid2同理,合理中位数划分是 0-mid1-1,和0-mid2-1这些数字来作为左边半个部分,这样中位数就是左边半个部分的最大值,和右边半部分的最小值,根据奇偶情况算一下而已。

2025-02-25 16:58:10 384

原创 初识C++20协程

协程什么特点呢?简单概括就是可挂起和重新执行的执行体,非常适合用于什么呢?根据到现在了解的特点,主要还是用于异步执行里面,类似多业务处理需要将某些任务分出去执行,同时自己这个执行流又去做其他任务然后再会来接着执行。也可以添加协程执行流,多个协程任务,然线程选择执行,形成一种具备优先级的调度模式,哪个任务执行多少这种,这样其实有点类似于多路转接的思想。归根结底就是因为协程能够暂停执行后再回来执行。至于更多其他用法,目前也还在了解中,可以自行查看文档或者找寻其他教程。

2024-12-09 18:18:07 957

原创 解决docker不加载 /etc/docker/daemon.json文件的问题

结果发现,我居然有 --config-file=/var/snap/docker/2963/config/daemon.json,就是说我的docker服务启动时,时–config-file=/var/snap/docker/2963/config/daemon.json该位置的daemon.json而不是我们认为的/etc/docker/daemon.json文件。但是当我重启发现呢,镜像都不在了,但是由于网络问题,镜像每天都在变,不可能每天更新站点拉取镜像。设置完成功拉取镜像,我就关机下次使用。

2024-11-27 15:38:53 4721 1

原创 easyX出现拖拽屏幕时,绘图区域出现和实际窗口区域不同问题解决

解释:windows的窗口绘画呢,不同窗口似乎有各自绘画坐标(你在拖动的时候实际你的窗口动效是停止的),这就导致呢,你拖动窗口,那个窗口陷入了暂停,在其世界绝对坐标中运动。于是出现了第二个问题,就是绘图窗口也出现了问题绘图窗口页偏移了,于是我就更加确定了,是鼠标所在读取窗口(不知道为什么鼠标读取的那个“区域”没有更新,但是easyX提供的窗口自动更新了),没有跟随移动的缘故。ScreenToClient:这就是一个转换API,他把你鼠标监听所在的实际位置,转换过去那边的坐标,使其最终和你的坐标对齐。

2024-10-10 09:50:40 410

原创 Linux多路转接

下面是一段示例代码。

2024-08-10 14:21:32 1041 1

原创 网络层和数据链路层的理解

比如你的windows 电脑的地址就是,192.168.184.128的地址,那么其通过你路由器转换之后,在往上一层传输时,IPV4的地址可能就变成了182.168.1.123了。在每次做这个的时候,你的路由器都给你做一张表,说192.168.184.128这个地址,是甲主机的,当对方有数据发过来。如果你曾查看过Linux的IP或者windows下的IP都会发现有一个子网掩码,将你的IP地址按位与上你的子网掩码就能得到你的主机号。一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通;

2024-08-04 01:09:20 1025

原创 01背包问题和完全背包问题(动态规划的理解)

理解上述要点,那么动态规划的核心电就在于两个。

2024-07-27 00:42:33 664

原创 TCP与UDP的理解

udp协议报头数据表格TCP报头表格序列号: TCP对其数据帧中每一个字节的数据都做了一个编号,发送方用这些序号标记哪些数据发送出去。确认序号: 接收方响应给发送方时,用确认序号告诉发送方,接收方寂静收到了确认序号之前的那些数据,这个确认序号就告诉发送方,下一个数据应该从哪个序号开始发送。ACK: 确认序号标志位,当ACK=1时,确认序号有效,当ACK=0时,确认序号无效。值得注意的是,确认应答要保证前面的数据发过去了,也就是收到了ACK,才会继续发下一次的数据。问,为什么不只用一个序号就够了吗?

2024-07-17 02:38:45 1677 1

原创 x64-linux下在vscode使用vcpkg

5.在使用该库过程中,可能还是需要安装各种依赖,比如boost安装时,要openssl。openssl有需要autoconf等一些列工具,autoconf有可能找不到配置文件需要autoconf-archive。3.在你自己的项目目录下新建一个vcpkg.json,最简单的格式如下,如果你有更加细致的版本控制需求,可自行去官网查询。1.使用vscode远程连接上对应的linux ,或者直接在图形化界面上使用。4.编写cmakelist,这个里面可能需要你指定编译器。

2024-06-13 12:39:38 830 1

原创 TCP/UDP 套接字的编写

否则,将返回 值 SOCKET_ERROR ,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。否则,它将返回SOCKET_ERROR,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。连接实际上是使用 accept 返回的套接字建立的。果未发生错误, 则 accept 将返回 类型为 SOCKET 的值,该值是新套接字的描述符。否则,将返回 值 INVALID_SOCKET ,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。

2024-05-24 18:18:54 503

原创 网络的基础理解

众所周知,计算机有许多硬件,以及底层的操作系统都有好多(对应的厂商也有很多),如果说彼此之间通信协议都不同意,如同打电话交流一样,你说英语,我说汉语该如何理解彼此的意思呢?协议实际时是由多层协议,一层一层的封装的。就好之你打电话,你们都说汉语是一种协议,底层无线电传输振动与电磁波相互转换也涉及协议。如图:每层数据传输时,都会添加对应的报头(header),那些形状就是表示对应的报头。**下图的数据传输也并非就是所有的网络通信都是如下图,实际还有中间路由转发等。:其中四层就是不考虑物理层。

2024-05-23 22:05:57 1253

原创 POXIS共享内存及信号量使用

相反,它们会创建一个映射区域的私有副本,即所谓的写时复制(copy-on-write)行为。这意味着初始时,映射区域和原始文件的内容是共享的,但一旦对映射区域进行写操作,系统会在需要时复制相应的页面,以确保私有映射区域中的修改不会影响原始文件或其他进程对同一文件的映射。对映射区域的写操作会反映到原始文件中,即写操作会更新文件的内容。持久性:通过 sem_open 创建的信号量默认是持久的,这意味着即使创建它们的进程已经终止,信号量仍然存在。不多介绍,之间你创建打开文件,是打开了文件描述符的。

2024-04-17 22:57:08 803

原创 Linux下C++获取文件流的文件描述符fd

因为用C++的对象读写其实有许多便利,所以我们只需要打开一个文件,更换底层的文件描述符,这样就可以使用C++的IO来做操作了。//注意,因为用的是ofstream,其缓冲区规则是全缓冲,如果你想要行式,那么就flush。(比如网络套接字socket,其使用就是文件描述符的使用)//当然,C++的std::endl具备刷新的效果。实例,下面通过重定向到标准输出,来将输入打印到屏幕。解释:因为在linux用C++时,

2024-04-16 16:25:46 792

原创 C++:new与delete

区别于C语言的是,

2024-04-12 11:00:37 414

原创 Linux线程

pthread_cond_t #这是一个类型,常用于定义一个条件变量,cond是condition之意# 这是一个宏,用于赋值给pthread_cond_t类型变量以初始化的pthread_cond_wait(pthread_cond_t*,pthread_mutex_t*) # 让指定含有条件变量的无法申请锁的线程进入等待pthread_cond_signal(pthread_cond_t*) # 让用指定条件变量的线程唤醒,且只唤醒一个。

2024-03-29 16:08:58 852

原创 VSCode使用MSVC编译器

3.分别生成对应的默认模板即可。但是其中参数可能需要配置。2.安装好C/C++插件。

2024-03-21 02:43:29 863

原创 Linux信号

内核态毫无疑问是可以调用用户的的方法的,但是这样的话,用户态就可以借此做一些越界不属于用户权力的事,不够安全),所以这个时候执行完用户任务的时候,回到之前的系统调用。3.异常产生信号:比如除0错误,进程在运算时,引发了硬件错误,进而使得操作系统来处理,发送信号给进程,来杀掉这个进程,以恢复硬件的状态。通过位图,位图的下标,来表示信号的编号,内容的01,来表示是否收到信号。SIG_BLOCK :添加set里面的信号成阻塞(就是说,如果信号集里面,1的就设置成阻塞,0的话不做调整)n信号在位图内就是n。

2024-03-10 15:47:33 950

原创 Linux管道

pipefd[2]:返回一个管道文件描述符数组,pipefd[0]是读端,pipefd[1]是写端。要进行读,就要关闭写端/要进行写,就要关闭读端。管道:**管道本质是内核中的一块缓冲区,多个进程通过访问同一块缓冲区实现通信。通过向管道里面读写,完成进程之间的通信。下面是利用匿名管道实现的一种进程池:其中展现了匿名管道代码编写种可能出现的bug。mode:指打开文件的权限,一般来说要减去umask。pathname:打开管道文件的地址。返回值:成功返回0,失败返回-1。返回值:0成功,-1失败。

2024-03-05 17:35:30 462

原创 linux的通信方案(SYSTEM V)

基于SYSTEM V的还有对应的信号队列(Message Queue),信号量。基本的系统调用函数,在下面代码中有,具体使用可以通过man手册查询。做法:去申请一块空间,让其映射到对应的不同进程的进程地址空间。linux内核看SYSTEM V设计的共享内存等通信方式。下面展示下Message Queue的简单使用代码。shmctl # 操控这块共享内存。shmat # 挂接共享内存。shmget #创建共享内存。#查看当前有哪些共享内存。#删除对应的共享内存id。那么具体是怎么做的呢?

2024-03-03 02:39:58 987

原创 Linux文件系统笔记

优点:动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文。-I 新增头文件搜索路径:表示找头文件是,也要去所给目录下找,-L新增库文件搜索路径:找库时,要去所给目录下找。件的整个机器码在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接。也需要打包,表明对应的库和头文件。

2024-02-19 20:13:30 1055

原创 C++特殊类设计

【代码】C++特殊类设计。

2024-02-17 11:04:10 405

原创 Windows11右键新建.md文件

也就是说,这种文件默认对应的就是用VScode打开,新建的时候需要有Shellnew项里面存在NewFile。我猜,OpenWithProgids就是用什么程序(Program)打开的意思,后面是ID的意思。参考了网上很多修改注册表的方式,又去微软社区搜了OpenWithProgids的意思。我参考修改注册表的形式,修改对应的.md后缀成功了。因此分享出来,仅供参考。windows11右键如何新建.md文件,这个参考了网上说是修改注册表。但是有基本都不是Vscode的md的,于是对我都无效。

2023-12-20 18:10:40 1095

原创 异常与智能指针(Exception & Smart_Ptr)

目前没有方便的解决办法,C++里面提供的方案就是对意识到是循环引用的情况,就使用另外一种指针。:这种指针就是用一个计数的办法,存储有多少个指向对应空间的指针,用这个来解决不能赋值的问题。我们知道,C++支持重载运算符,所以只要重载*和->就可以解决像指针的使用。运行下面的代码,打断点调试下,对除0函数里面的注释定义的取消,看看效果。有这个指针,基本解决了90%的场景,但是呢有一个特殊的场景没法解决。,这样就不会有指针悬空的情况,但是对某些情况就无法处理。而智能指针,就是基于这个特点去设计的。

2023-12-18 22:49:00 994

原创 C++11

使用初始化列表时,可添加等号(=),也可不添加。来看几个例子。

2023-12-09 21:08:50 807

原创 linux重定向

第一个参数是打开文件二点路径,第二个参数是打开方式,如英文的含义,第三个参数是如果在有创建文件的时候才给,如果没有创建,mode参数就会被忽略,其就是传输创建文件的权限,一般传输八进制数字。还有种不是很常规的写法,把标准输出重定向为log.txt,这个时候1就是指向的log.txt,但是1又被重定向指向了2,所以这个时候会直接通过标准错误打印信息到屏幕上,而log.txt里面什么也不会有。执行这个命令就能得到对应的两个文件,你会发现标准输出和标准错误分别就定义到了两个文件了。如下代码是可以验证上述的。

2023-12-08 00:05:12 1129

原创 Hash表,位图,布隆过滤器的实现

hash表就是一种存储数据的方法,

2023-12-01 17:29:07 87

原创 Linux的进程程序替换

简单介绍下execl,path给出替换的程序的路径,并且给出对应指令的字符串数组作为对应需要的指令,后面可以任意的字符串,如上面注释那样,在转换成对应的程序里面传的,arg是可变参数个数的字符指针,也就是让你传字符串,注意,这里需要让以NULL结尾才行。比如用A进程去替换B进程,那么之后运行的就是B进程,B进程就不会再运行了,这就是进程程序替换。剩下的就是执行命令,去获取输入的命令,查看是否需要重定向,然后就是区分内建命令和常用命令。上面使用的execl,linux下C语言里面还有好几个进程替换的函数。

2023-12-01 16:35:04 64

原创 AVLTree的插入实现

AVLTree本质是对,二叉搜索树的一种优化,二叉搜索树会因为插入数据顺序的问题,使得整棵树的效率变得底下,最后变成N的查找,丢失其优势特性。AVLTree于是引入一种平衡因子(balance factor,之后简称BF),让表示右子树减去左子树高度,只要这个BF绝对值不大于1,我们认为这棵树近似平衡,是一颗平衡二叉树。而这种平衡的搜索二叉树就能保证效率。

2023-11-22 15:22:08 76

原创 进程退出,等待

两者都有**status:**下面会详细介绍,其真正的作用(通过整形指针给整形赋值)是得到返回信息,所以如果你传空指针,意味着就不在意子进程的返回情况。观察可得,这种等待期间,是可以去父进程可以执行其他时间,只需要每隔一段时间来等待子进程就可以,而不是直接挂起等着子进程,同时子进程也可以执行一些任务。可以通过给pid传参数,选择等待任意一个进程,如果传值给-1,其就表示可以等待任意一个进程,option再传0的话,和wait效果就一样了。上面注释部分如果取消,下面就可以是答案,我们通过这点可以发现,

2023-11-13 23:43:58 187

原创 map和set的使用,二叉搜索树,红黑树的实现

这是为了后序表达更简洁。

2023-11-13 23:31:52 79

原创 实现迭代器封装过程遇见的问题总结

经过半天的调试和分析:发现原来是因为,const T实际上对Node那里实例化了另外的节点了,也就是Node*的节点,导致类型不同,从而刀子没有合适的函数去调用,也就是没有针对。看看下面的代码,依旧会报错,和上述原因类似,不妨分析下。,不知道Tree这个iterator是究竟是什么。Node*的iterator了,这点是值得注意的。

2023-11-12 12:35:00 58

原创 win11画图截取或者橡皮擦除后出现马赛克的非彻底解决(最新版画图已修复)

windows11在11月左右,再次打开画图软件,发现出现了个问题,截取或者擦除之后,原来的地方变成了马赛克,去查了百度之后,发现好像是Win11这个版本画图的特性。目前没有很好的一劳永逸的办法(重新安装Windows11自己就给你更新成最新版,有大佬可以教下如何阻止更新也可以指教下。依次点击,确保你选择的图层是新建的那一个(一般来说默认就是新建的那一个,不需要再点击了)在此做个记录,如果有更好的办法,求大佬评论区分享下。可以说很有Windows一向的作风,越更新越垃圾。这样使用就和之前一样了。

2023-11-08 23:34:10 10984 12

原创 C++的多态(polymorphism)

基本定义:在C++中,多态(polymorphism)是一种面向对象编程(OOP)的特性,允许不同的类(通常是基类和派生类)使用相同的接口进行交互,但表现出不同的行为。

2023-10-24 23:39:46 258

原创 C++的继承(inherit)

一样的具备构造函数的特性,会有初始化列表,也会在初始化列表最前端去调用一次父类构造函数,,假如我要实现和父类相类似,但是有要用很多父类的,那么继承就方便。C++的继承里面,有一种继承方式是虚继承,为了解决菱形继承的缘故。VS的实现中,是把属于父类的那一部分成员,给放到了整个类的最底层。如上相当于B这个类就是私有继承,那么其继承的三个成员都是是有的。父类的静态成员是private,子类依然是没有资格访问的。子类的析构函数,只需要完成对子类那一部分的处理即可,子类与父类是共用一套静态成员,继承不算很好的描述,

2023-10-23 17:58:05 190

原创 C++实现栈,队列,优先级队列

【代码】C++实现栈,队列,优先级队列。

2023-10-16 09:57:45 83

原创 模版template

不妨调用test2函数就去查看Data这个类,就发现已经把a这个对象里面的成员实例化成。跑上面段代码发现只第一段(被注释的那里是会编译器报错的,原因是编译器不知道你要实例化成什么样子)直接指定类型就可以了。

2023-10-13 00:01:19 67

原创 cin.tie(NULL);ios_base::sync_with_stdio(false);的解释

先解释这个,这个意思是和C语言的标准输出输入进行绑定。C语言的程序一般来说在程序第一次输入设备时,对应IO就已经准备就绪了,但是C++似乎并非如此(对于这点确是没找到对应资料,有清楚的请告知):C++的的IO就不与C语言绑定,最明显的就是你输出换行符不会再默认直接刷新出cout的内容。逐步运行这段代码,你会发现cin都输入完了,依然不会打印出10;本文主要参考自一个英文网站,和自己的实践经验。使用下面个语句才行。

2023-10-12 22:57:59 427

原创 gdb调试(快速上手)

通过info 查询断点编号,删除即可(gdb每次启动之后断点编号被删除了,编号一直增长,即使删除了不会调整)这种代码编译出的的就是release版本,是无法用gdb调试的,所以想要进入调试,就得用下面的命令。就会从第一行开始显示,往后你只需要敲回车就会一直显示后面的代码,因为gdb会记录最近执行的命令。图中3这个断点对应的Enb下就已经是no,说明断点被禁用,调试时也就不会在这里被击中而停下程序。输入指令就可以看见代码,但是这个是gdb自己选择的行号开始显示,如果你想指定行号。打断点和查看断点如下示例。

2023-10-08 17:22:30 123

原创 整形提升和算术转换

1.什么叫整形提升,就得搞清楚什么是整形。这里不过多介绍。这里知识会涵盖,下列介绍时也会用到,希望大家先去搜搜其他得博客或者书籍了解一下。。上述类型都可以在前面加unsigned变成无符号数(二进制里面得第一位不作为符号位,作为计数位)。打印结果就是“b”字符,所以char算是整形,下一个打印又是98。

2023-08-27 11:12:16 88

原创 模拟实现string,vector,list(双向链表)问题反思

简述:模拟实现中,复现了文档里面的运算符重载,完成了iterator(迭代器)的实现,完成了字符(以及字符串)查找和插入,实现基本的拷贝构造,赋值重载。对自己实现过程中遇见的问题做出几个标记。名字都保证和C++标准网站的命名一致,实现相同或者相类似的功能。:这个函数的任务是扩容,参考g++编译器下面的实现,我也用了二倍扩容的方法,这里需要注意多留下一个空间方便放’\0’;:这个基本上值得注意的不多,就是实现两个,方便外面传const型的string时,里面因权限延展的报错。

2023-08-18 17:26:46 116 1

模拟实现string,vector,list(双向链表)问题反思

模拟实现string,vector,list(双向链表)问题反思

2023-08-18

空空如也

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

TA关注的人

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