- 博客(72)
- 收藏
- 关注
原创 通讯录完善版本(详细讲解+源码)
经过长达六个月的时间,年迈的博主终于想起来,通讯录还需要完善,那么这篇文章就对我们的初代通讯录(初代通讯录(详细讲解+代码)_化学系通讯录最简单三个步骤-CSDN博客)进行完善,增加动态更新内存的内容,以及建立一个文件,将通讯录的信息保存下来;
2025-04-25 20:44:43
1571
57
原创 在排序数组中查找元素的第一个和最后一个位置
public:elser = mid-1;left = l;elsel = mid+1;right = r;
2026-04-04 11:20:22
51
原创 kruskal
int n,m;int x,y,z;}a[M];i<=m;++i){cnt++;cin>>n>>m;i<=n;i<=m;++i){kruskal();return 0;
2026-03-31 17:21:05
36
原创 网络延迟时间
public:pq;pq.pop();if (st[u])continue;if (!i < n;++i) {return -1;return res;
2026-03-29 22:40:03
189
原创 大臣的旅费
/ 经过 cur 的最长路径 = 最长的两条子路径之和。// 只有一条子路径,该路径本身就是经过 cur 的路径。0:y[sz-1];// 返回从 cur 向下能到达的最远距离。//叶子节点且不是根,返回0。// 存放从 cur 向下的所有路径长度。//往下递归寻求最大路径和。
2026-03-29 20:25:18
385
原创 单源最短路径
int n,m,s;i<=n;dist[s]=0;pq.pop();st[u]=true;if(!i<m;++i){int u,v,w;dijkstra();i<=n;return 0;
2026-03-28 22:37:05
218
原创 分割等和子集
/枚举从0-n-1的数的组合能不能和为target dp[i][j]表示前i+1个元素能不能组成和为j。if (num > j) {//如果这个数比枚举到的数大,拿不了。if (sum % 2 == 1)//如果总和是奇数,不行。dp[i][0]=1;
2026-03-23 20:30:24
163
1
原创 【无标题】
僵尸进程不占用CPU/内存,但占用进程表项,大量堆积会导致无法创建新进程。孤儿进程指的是父进程退出或者挂了的子进程,最终会被一号进程领养,通常无害,僵尸进程即关闭或者挂了的时候其资源没有父进程进行回收的进程,导致资源泄露。:存在进程链P1→P2→...→Pn,P1等待P2持有的资源,P2等待P3,...,Pn等待P1。:子进程再fork孙子进程后立即退出,孙子进程成为孤儿被init收养,父进程只需等待子进程即可。父进程主动回收,使用双fork,让孙子进程被init进程管理。:子进程已终止,但父进程未调用。
2026-03-20 20:52:06
241
原创 【无标题】
用于定义一个标识符,通常用于定义宏或者标识符。在头文件中,通常会定义一个标识符,用于表示当前头文件是否已经被包含。:用于判断某个标识符是否未被定义,如果该标识符未被定义,则条件成立,执行下面的代码。通过这些预处理指令的组合,可以有效地防止同一个头文件被多次包含,避免重复定义和编译错误。是C语言中用来防止头文件被重复包含的预处理指令。的条件不成立时(即该标识符已被定义),:结束条件编译指令的块。用来结束条件编译块。
2026-03-19 10:17:45
29
原创 深度解析TCP三次握手四次挥手
服务端将剩余数据都发送完毕后,确认自己没有东西要发了,于是向客户端发送FIN报文,用来关闭服务端到客户端的数据传输。服务端:CLOSE_WAIT——>LAST_ACK(最后确认)TCP作为一个可靠的传输协议,无论是建立连接的“三次握手”,还是断开连接的“四次挥手”,其每一步的设计都充满了智慧,旨在复杂的网络环境中保证数据传输的准确性和可靠性。三次握手是为了防止历史重复连接的初始化错误。四次挥手是由于TCP的全双工特性,允许一端关闭后另一端继续发送数据,并通过TIME_WAIT和2MSL。
2026-03-18 21:11:26
569
原创 康复训练 7
TCP是全双工协议,双方需独立关闭各自的发送通道。服务端收到FIN时可能仍有数据待发,因此先回ACK确认,待数据发完再发自己的FIN,导致ACK和FIN分开发送,形成四次交互。
2026-03-18 21:11:14
393
原创 寻找重复数
/ 因为有重复数字,所以至少有两个不同的索引会指向同一个值(即同一个后继节点),从而形成环。//从索引 0 出发,按照 nums[i] 跳转,由于值在 1 到 n 之间,不会越界。// 重复的数字就是环的入口。
2026-03-18 20:50:40
33
原创 康复训练 6
三次握手:第一次握手,客户端主动打开连接,发送SYN报文,并生成随机序列号,客户端状态从CLOSED变为SYN_SENT,第二次握手,服务端收到SYN后,同意建立连接,然后发送SYN-ACK报文(确认号,服务端自己的序列号)作应答,状态从LISTEN变为SYN_RCVD,第三次握手,客户端收到SYN-ACK后,检查确认号是否正确,然后状态从SYN_SENT变为ESRTABLISHED,然后发送一个ACK报文做最终确认,这个时候,连接就建立了,可以携带数据进行传输了,服务端收到ACK后。为什么需要三次握手?
2026-03-16 23:30:17
43
原创 康复训练 5
自定义删除器是智能指针在析构时调用的可调用对象(函数、函数对象、lambda),用于释放所管理的资源。默认情况下,unique_ptr和shared_ptr使用delete释放内存,但通过自定义删除器,我们可以定制资源的释放方式。对于unique_ptr:删除器是类型的一部分,需要在模板参数中指定。cpp// 使用 lambda(C++11起)// 使用函数对象对于shared_ptr:删除器不是类型的一部分,可以在构造函数中传入,更灵活。cpp// 直接传入lambda});
2026-03-13 22:12:49
452
原创 康复训练 4
通过检查对应shared_ptr控制块的强引用计数,不为零时创建一个shared_ptr返回(线程安全),然后强引用计数加一,为零则返回空shared_ptr。是线程安全的,其增减操作通过原子指令实现,因此多个线程同时拷贝或销毁指向同一对象的shared_ptr不会导致计数错误。不是,只有shared_ptr控制块的引用计数是线程安全的,通过编译器,cpu等一系列底层操控实现引用计数的原子改变。转移后原unique_ptr变为空。不可以,这个类型的智能指针是禁止拷贝和赋值构造的,独掌所有权的智能指针。
2026-03-13 20:47:08
236
原创 康复训练 3
内存布局:类对象内存模型(成员变量、虚指针)、字节对齐规则(alignof/alignas)、内存对齐对性能的影响答:在对象内存模型的开始,是虚函数指针,如果有菱形继承的话还有虚基表,接着是父类的成员变量(如果继承了父类),接着是自己类对象的成员变量。
2026-03-11 23:19:29
312
原创 康复训练 2
类型和值类别。左值(lvalue):表达式指向一个持久的内存位置,可以取地址。例如:变量名、返回左值引用的函数调用、字符串字面量等。注意,const左值也是左值,虽然不能修改,但它有身份。纯右值(prvalue):表达式是临时值或字面量(如42、true),没有持久身份,通常只能用于初始化或赋值。将亡值(xvalue):C++11引入,表示资源可以被回收的右值,例如通过std::move转换的结果、返回右值引用的函数调用。将亡值既有身份(即将消亡的对象),又可以移动资源。
2026-03-11 23:13:49
346
1
原创 康复训练 -1
什么是资源获取即初始化?与智能指针的关系?答:1.通过对象的生命周期来控制和管理资源,构造时申请,析构时释放,避免忘记释放申请的资源而造成的内存泄漏2.智能指针正是对RAII思想的运用具现,将所要管理的动态内存资源放入智能指针对象里面,析构时自动释放资源评分:6.5/10:没有提到具体的智能指针类型(如和的区别)。:RAII不止用于内存,还用于其他资源(锁、文件句柄、数据库连接)。:没有提到异常安全,而这是RAII最大的优势。
2026-03-09 16:40:33
358
空空如也
学习c语言一个星期,记录一下
2024-10-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅