- 博客(779)
- 资源 (33)
- 问答 (12)
- 收藏
- 关注
原创 C++的智能指针weak_ptr和普通指针的区别
两个share指针指向的资源中的share指针指向对方,这样析构的时候,两个指针的强引用计数都从2减到1,不为0,资源没有释放。用普通指针确实没有增加share指针的强引用计数,表面上看似解决了循环引用问题,实际上带来了普通指针的内存安全问题。我们之前说过weak_ptr可以用来解决share_ptr循环引用的问题,先来看看循环引用问题。改为weak指针,只引用不计数,不增加share指针中的强引用计数,可以正常释放资源。弱引用计数用于管理控制块,当强引用计数和弱引用计数均为0时释放控制块。
2025-04-03 11:51:46
89
原创 C++实现求解质数
质数又称素数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除。对于一个数,如果它不能被 2 到其平方根之间的任何数整除,则它是质数。不是质数的自然数称为合数(规定1既不是质数也不是合数)即,质数不能表示为除了1和本身外其他自然数的乘积。从 2 开始逐个检查每个数是否为质数。方法二:埃拉托斯特尼筛法。
2025-03-24 15:33:55
277
原创 C++实现求解最大公约数
如果a大于b,那么a%b的结果就是a除以b的余数,否则结果就是a,所以当a小于b时,递归传参可以交换a和b。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。整数除法可以通过减法计算,显然效率不如辗转相除,当a和b相差大时需要多次计算。两个整数的最大公约数是能够同时整除它们的最大的正整数。函数,直接调用即可,内部实现应该是欧几里得。方法二:欧几里得 辗转相除法。
2025-03-24 15:04:00
144
原创 C++实现求解24点游戏
使用回溯遍历四个数字的每一种组合,具体来说,每次从数组中选取两个数字以加减乘除四种方式得到一个新的数字,这样数组的规模会减少,从4个变成3个,再递归下去变成2个,最后变成一个的时候判断是否等于24。注意样例 [3,3,8,8] 也是可以通过3-8/3得到1/3,然后用8➗1/3得到24,由于无法精确存储小数,所以和24比较相等时允许存在误差。判断四个数字能否通过加减乘除得到24点。注意除法的存在需要用浮点数存储。
2025-03-22 23:48:54
221
原创 C++实现大整数相乘
有两种方法,一是借助大整数相加的方法,两个数相乘其实就相当于一个数反复加自己,加的次数就是另一个数的值,但这样太耗时,所以模拟小学的竖式乘法,将一个数的每一位乘以另一个数得到一个字符串,然后将这些字符串相加起来,注意每往后一位就往字符串后面补个0,这样的方法比较清晰易懂。还有一种方法代码比较简洁,同样是模拟手工乘法的过程,逐位相乘并处理进位,但是不需要额外计算大整数相加,两个数相乘的结果的位数必定是m+n或者m+n-1。大整数意味着无法用基本数据类型装下,只能用字符串装下,然后手工模拟计算过程。
2025-03-21 15:52:14
244
原创 C++实现大整数相加
从两个字符串的最后一位开始两两相加,记录进位,每次均有sum=a+b+sum,此后sum/10保留为进位,逐渐往前处理直到两个字符串均处理完并且进位也用完。大整数意味着无法用基本数据类型装下,只能用字符串装下,然后手工模拟计算过程。
2025-03-21 15:21:55
200
原创 《程序员》—— 古诗 by DeepSeek
深夜工作,电脑屏幕的光与月光交相辉映,快速敲击键盘,绘出一座座史山,代码数量庞大,凝聚了无尽的智慧与心血,bug除尽后方才看到黎明的曙光
2025-03-10 11:50:29
100
原创 C++的优先队列priority_queue如何自定义排序
在C++中,是一个容器适配器,默认情况下它是一个最大堆,即队列顶部的元素是最大的,如果想自定义排序规则,可以通过提供一个自定义的比较函数或函数对象来实现。
2025-03-08 12:43:16
154
原创 二分查找为什么return left而不是return right
为什么return left,而不是return right,可以知道过程中left的左侧小于目标,right的右侧大于目标,当循环跳出时有left等于right+1,也就是right在left的左侧,即left比目标大,而right比目标小,所以目标的插入位置应该是left。要在一个有序数组里面查找一个元素的位置,就是要找第一个大于等于目标元素的位置,每次和中间位置元素进行比较,然后确定下一次的查找范围是在左半部分还是右半部分,常规代码是这样的。
2025-03-07 13:29:49
151
原创 Linux常用命令分类整理
Linux的文件操作、系统信息、权限管理、进程管理、网络相关、压缩解压、用户管理、搜索、磁盘管理、软件包管理,还有一些实用小技巧
2025-02-25 15:48:25
464
原创 C++的std::sort函数自定义排序
对于数据类型是自定义的结构体或者是自定义的类,可以使用自定义函数排序或者lambda表达式自定义函数排序int age;// 按年龄升序排序// 使用自定义的比较函数排序return 0;lambda表达式int age;// 使用 Lambda 表达式按年龄升序排序// 按年龄升序排序});return 0;
2025-02-18 15:28:23
230
原创 C++链表那些事儿
从一个数组里面取元素返回链表,如果数组是空返回空指针,不带头节点的,意味着第一个元素需要放到head指针里面去,然后从第二个元素开始放到链表尾,不断更新链表尾。访问链表,如果链表是空的直接返回,输出当前节点的值,更新当前节点。
2024-11-06 00:14:34
929
原创 Go并发多协程顺序打印
启动三个协程分别打印1、2、3,要求按照123123123123……的顺序打印出来,可以使用锁或者通道实现。也可以用通道实现,channel分为有缓冲和无缓冲,内部封装了锁,读写通道是原子性的;有缓冲通道:发送会在缓冲区未满时不阻塞,在缓冲区满时阻塞。无缓冲通道 :发送和接收都会阻塞,直到被接收或者通道有值。
2024-10-25 14:39:20
584
原创 32位机器和64位机器的32和64具体指的是什么的长度
32位和64位表示的是CPU的架构,32位和64位具体指的是CPU寄存器的大小(bit)、数据总线的长度(bit)、内存地址的长度(bit),由此带来32位的寻址空间只有2^32字节≈4GB。与CPU架构对应的有32位操作系统和64位操作系统,一般64位的操作系统可以运行32位的应用程序,反之则不行。与此对应的数据类型长度问题,32位机器的类型一般是32位的,如普通整型、浮点型。在一些编程语言当中,uint、int的长度是随系统变化的。
2024-10-19 11:02:36
467
原创 常见图片格式区别
适用场景:适合于存储摄影图片和复杂的图像,例如自然风景和人像,通常用于网页、社交媒体和数字摄影。适用场景:主要用于Windows系统的图像处理,适合需要高质量的图像。特点:支持动画和透明背景,采用无损压缩,但颜色限制在256种。特点:支持多种色彩空间,适合高质量图像存储,可以是无损或有损。特点:谷歌开发的格式,支持有损和无损压缩,支持透明度和动画。适用场景:优化网页图像,减小文件大小,同时保持质量。特点:一种新型图像格式,提供更好的压缩比和图像质量。特点:一种无损格式,存储每个像素的数据,不压缩。
2024-10-05 19:52:37
408
原创 C++如何从字符串中提取数组
用stringstream将字符串变成流,然后用getline从流中读取字符串直到遇到逗号或者回车,再将字符串变成数字即可。假设字符串中数字是以逗号隔开的:1,2,3,4,5,6,7,8。
2024-09-14 17:38:10
322
原创 IO多路复用的Linux内核原理
IO 多路复用是一种同步IO模型,一个线程可以监视多个文件句柄,一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作,没有文件句柄就绪就会阻塞应用程序交出CPU无需为每个IO操作创建一个线程或进程,没有线程切换的开销。
2024-09-10 16:59:58
376
原创 share_ptr循环引用
此时这两个share指针的引用计数都是2,当node超过生命周期被析构时,node的引用计数变成1,不为0,那么node指向的类实例不会被析构,注意智能指针也是一个类,智能指针的析构和它指向的类实例的析构是两回事,程序中Node实例没有被析构导致p也不会析构。定义一个类,这个类有一个share指针变量,创建一个share指针指向这个类实例,然后将类实例的成员变量share指针也指向这个类实例。用weak指针解决循环引用问题,weak只引用资源不增加资源引用的计数。
2024-07-06 23:25:03
578
原创 用数组实现堆
实现堆关键在于堆调整,堆有向上调整和向下调整,当pop堆顶元素的时候是弹出数组里面最小的元素,这个时候需要向下调整堆,把堆顶元素的值更新为数组末尾元素的值,然后从堆顶开始向下调整堆。从树根节点开始,找出左右子树中比自己更小的节点,交换值,然后从交换后的节点处继续往下寻找更小的节点,直到堆末尾或者没有更小的。向上调整堆先找出当前节点的父节点,如果父节点是更大的节点,那么交换值后往上走,继续向上寻找更大的节点。push元素的时候先放到数组末尾,然后看看容量是不是满了,增长一下容量,开始从数组末尾向上调整堆。
2024-07-06 15:34:31
439
原创 用数组实现队列
队列用链表实现很简单,记住链表头和链表尾就行了,每次push就往头插入,每次pop就删掉尾巴。我们这里用数组实现一下队列,基本思想是一个循环滑动的窗口,用两个变量记录队首和队尾索引。这里比较难的是队列容量的动态增长,申请两倍的容量后,从队首索引开始拷贝。push放到队尾,pop放到队首,队尾索引和队首索引都需要循环。
2024-07-05 20:35:54
196
1
原创 用数组实现栈
为了栈容量动态增长,写一个成长函数,将容量翻倍,即申请一块新内存,将原来元素拷贝过去,释放掉原来的空间。这里用数组实现,需要三个成员变量,分别记录栈容量、栈顶索引(栈元素数量)、数组首地址。push的时候直接放到栈顶位置,然后栈顶移动,判断元素是否满了,满了就增长栈容量。pop的时候先看看栈是不是空的,不是空的就移动栈顶,返回栈顶元素。链表实现的话,push就往头节点插入,pop就删除头节点。如此一来top实际上是栈元素的个数。栈的实现可以用链表或者数组实现。
2024-07-05 15:52:04
440
1
原创 如何写一个死锁
设置两个全局变量当作线程共享资源,为了让两个线程分别持有一个资源让它们抢到一个资源后睡一会让另一个抢。最简单的死锁,线程x持有资源a请求资源b,线程y持有资源b请求资源a,死锁了。等同于这个代码,刚刚的代码相当于实现了一个自旋锁,下面这个是互斥锁。死锁就是多个进程或者线程竞争临界资源所造成的僵局。只需要把它们请求资源的顺序改成相同就不会死锁了。
2024-07-05 00:37:12
260
1
原创 Ubuntu换源
dd可以删除整行,把整个配置文件的内容全部删掉,你也可以在删除之前备份一下,然后把刚刚copy的配置内容复制到这里来。根据发行版本找到对应的配置文件copy起来。查看发行版本,记下来。
2024-06-22 11:51:18
462
原创 xv6 qemu 卡在Booting from Hard Disk...
定位到xv6目录下的kernel.ld的第25行。.stab:{ 修改成。
2024-06-21 13:06:37
559
2
原创 环形buffer单生产单消费队列
使用两个循环指针用来实现环形队列,头指针和尾指针在队列为空的时候是相同的,起始为0,当头指针快追上尾指针的时候代表队列已满,也就是head=tail-1的时候,这意味着我们使用了一个元素的位置来表示队列是否满,环形buffer实际容量为数组长度减去一个单位。环形缓冲区由一个固定大小的数组构成,生产者将数据写入缓冲区的尾部,而消费者则从缓冲区的头部读取数据,当缓冲区被填满时,生产者会等待,直到有空间可用;生产即入队,元素安排在头指针处,之后头指针移动,消费即出队,取尾指针处元素后移动尾指针。
2024-06-12 16:56:08
260
原创 非递归式实现快速排序
快速排序基本思想是寻找一个元素作为基准,将其他元素划分为两部分,其中一部分比基准元素小,另一部分比基准元素大,然后如此继续对这两部分操作下去快速排序最简单的实现就是通过简单的递归,实现方式之一是使用双指针,两个指针同时走,左指针找到大的,右指针找到小的,然后交换这两个元素的位置,问题在于枢纽元素和谁交换,让右指针先走,两个指针走到相同位置的时候必然是右指针走到左指针的地方了,而左指针指向的元素是刚刚交换完比枢纽元素小的,而枢纽元素选的是第一个,因此它们进行位置交换就是正确的这里给出C版本,C++版本一般是将
2024-06-12 16:28:10
490
原创 【LeetCode】使括号有效的最少添加
括号离不开栈,栈可以消除有效的括号,先用栈将左括号装起来,遇到右括号并且栈非空就弹栈,如果遇到右括号栈空就计数,说明需要插入左括号,完事之后栈里面的元素就都是左括号,都计数,因为都需要加上右括号。对于一个只有()组合的括号字符串,如果想要这个字符串是有效的括号对,找出最少需要插入多少个括号。
2024-06-04 16:07:43
412
原创 WSL2修改CPU核数
先关闭所有wsl终端,远程连接开发的IDE也需要关闭,因为工具链开着给你wsl没有完全关闭,在Windows的power shell终端命令行窗口可以实验以下命令检查是否wsl已经关闭。然后文件内容复制下面信息,CPU核数为processors,修改即可,在确认所有Linux子系统已经关闭的情况下,保存文件重启wsl即可。创建文件C:\Users\\.wslconfig,目录必须对,例如C:\Users\Yezi。查看LinuxCPU核数。
2024-05-27 16:31:17
1667
原创 C++实现的单例模式日志类
自己实现的话, 日志内容应该包括,精确到微秒的时间戳,日志级别(DEBUG / INFO / WARN / ERROR / FATAL),日志写入时的代码文件名,代码行号和函数名,例如。这意味着我们需要一个单例模式的实现,需要将类实例静态化,由一个静态函数返回类实例的引用,由于静态变量只会初始化一次,所以每次返回的都是同一个实例。同时我们希望能够保留可以更改类实例初始化的参数,例如日志文件名,因此需要一个初始化的静态函数来进行类实例的初始化。并且我希望日志是这样使用的。代码维护在GitHub。
2024-05-26 00:04:15
373
原创 C++实现的代码行数统计器
思路比较简单,主要是用到了C++17的filesystem库用来解析目录和提取文件后缀,如果路径是个目录就提取子目录项逐个分析,如果子目录项是目录就递归调用本身继续解析目录,如果是代码文件就开始计数行数。前段时间到处面试找实习,有技术负责人的负责人问我C++写过多少行,5万还是10万,用来评估熟练度,有点难顶,于是写个代码统计器吧,输入文件夹目录或者代码文件,可以统计所有代码的行数。可以直接编译代码运行程序,在控制台输入目录的路径按下回车即可,例如输入。
2024-05-25 22:23:54
962
原创 C/C++ epoll实例
IO多路复用通常用于处理单进程高并发,在Linux中,一切皆文件,一个socket连接会对应一个文件描述符,在监听多个文件描述符的状态应用中epoll相对于select和poll效率更高。epoll本质是系统在内核维护了一颗红黑树,监听的文件描述符会作为新的节点插入红黑树,epoll会等待有状态变化的节点记录在链表里,然后拷贝到用户所给的数组里面返回出来。简单测试服务端,打开Linux终端,用一下命令连接服务器后即可传输数据。以下是一个独立的服务端代码,可以补充业务代码进行具体使用。
2024-05-25 22:04:52
667
原创 【LeetCode】【滑动窗口】【双指针】长度最小的子数组
腾讯微信搜索团队一面的题,一模一样,用两个指针记录滑动窗口的头和尾巴,sum记录和,当sum大于等于target的时候,记录最小长度,将滑动窗口缩短至sum小于target。如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。
2024-05-14 21:34:33
197
原创 【华为机考模拟题】Words、Vowel、计算字符串重新排列数
他在写日记的时候都会把元音字母写成大写的,辅音字母则都写成小写,虽然别人看起来很别扭,但是 solo 却非常熟练。你试试把一个句子翻译成 solo 写日记的习惯吧。给定一个只包含大写英文字母的字符串 S,要求给出对 S 重新排列的所有不相同的排列数。每个句子由多个单词组成,句子中的每个单词的长度都可能不一样,假设每个单词的长度。如:S 为 ABA,则不同的排列有 ABA、AAB、BAA 三种。为该单词的重量,你需要做的就是给出整个句子的平均重量。是元音字母的变成大写,其他的变成小写。
2024-05-07 16:19:35
684
计算机导论-实验报告-互联网与网络安全
2022-04-14
计算机导论-实验报告-电子表格处理
2022-04-14
计算机导论-实验报告-算法设计工具
2022-04-14
计算机导论-实验报告-演示文稿设计.doc
2022-04-14
计算机导论-实验报告-文字信息处理
2022-04-11
计算机导论-实验报告-操作系统与软件
2022-04-11
大学物理实验-实验报告-测量地磁场
2022-04-11
大学物理实验-实验报告-单摆的研究
2022-04-11
计算机系统实验报告 LC-3仿真器安装和使用
2022-04-09
空间滤波器之平滑滤波器和锐化滤波器
2022-04-06
基于主成分分析的人脸识别
2022-04-06
人工智能之回溯法python求解9X9数独
2023-01-06
如何用matlab画球
2023-01-06
蓝桥杯C/C++省赛:排它平方数
2023-01-06
如何用Python画一个简单的笑脸
2023-01-06
奥特曼打怪兽.cpp 源码
2022-05-13
面向对象程序设计-奥特曼打怪兽
2022-05-13
面向对象程序设计-类的设计与实现-实验报告
2022-05-13
大学物理实验-实验报告-太阳能电池的特性测量
2022-05-13
计算机系统1 汇编语言编程 成绩排序 代码
2022-05-07
计算机系统1-实验报告-LC-3汇编语言求成绩等级
2022-05-07
大学物理实验-实验报告-不良导体热导率的测量.doc
2022-05-07
大学物理实验-实验报告-碰撞实验
2022-04-23
计算机系统-实验报告-LC-3机器码编程实验
2022-04-20
大学物理实验-实验报告-偏振光的观察与研究
2022-04-20
大学物理实验-实验报告-热敏电阻温度特性研究
2022-04-14
UE5中输入移动的问题
2024-02-23
CSP202303-2垦田计划
2023-09-07
goland远程连接Linux开发每次调试都会生成调试文件,调试一次便多出一个文件,求解
2023-08-06
pnnx的graph rewriter有什么用
2023-07-19
如何在pnnx中实现logsoftmax和logsigmoid的转换到ncnn
2023-07-17
unity hub打不开
2022-10-20
Java和Python的赋值运算符=是不是都是引用改名而已,不是值复制?
2022-08-25
问一下各位,C++的切片除了字符串、set、vector之外,还有什么可以切片呢
2022-08-10
用C++的STL的set可以解决子集问题吗?
2022-08-08
计算机系统概论问题进制黑箱问题
2022-03-18
浮点数标准在指数变换的时候为什么要加上127
2022-03-11
从右到左压栈到底是左边先进栈,还是右边先进栈,是先处理栈顶还是先处理栈底
2022-02-25
C语言 谁能解释一下这个问题
2022-02-24
快速排序中的问题,疑惑,待求解
2022-02-10
为什么当月拿了117分,但总分只有104分
2022-02-10
PAT 1015 德才论 代码运行超时
2022-01-30
福尔摩斯的约会部分正确
2022-01-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人