自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 信号(Signal)

产生↓pending↓block 判断↓递达↓handler。

2026-05-24 14:23:19 472

原创 C++ 特殊类设计

private:// 只声明,不实现 + 设为私有需求核心方法不能拷贝禁拷贝构造 + 赋值重载只能在堆上构造私有 + 静态工厂返回 new只能在栈上禁 new + 静态工厂返回栈对象不能被继承final / 构造私有单例模式饿汉(启动创建)/ 懒汉(首次创建)

2026-05-15 18:19:59 314

原创 C++ 类型转换

/ 隐式转换:int → Aclass Bpublic:A a1;B b1 = a1;// A → BC++ 提供 4 种安全类型转换:相近类型:不相关类型const_cast:修改 const:继承体系安全向下转型dynamic_cast 必须有虚函数,否则无法使用volatile禁止编译器对 const 变量优化。

2026-05-12 15:50:48 171

原创 C++11智能指针与 RAII

public:​​​// 禁止拷贝构造// 禁止拷贝赋值​private:T* _ptr;

2026-05-03 12:39:12 356

原创 C++11 新特性

{}

2026-05-03 12:10:50 454

原创 哈希表的实现与封装

在泛型哈希表设计中,存储的数据类型 T 不一定是 key 本身,比如 map 存的是 pair<K,V>,而 set 存的是 K。这样同一套 HashTable 可以通过不同的 KeyOfT 支持 map 和 set,体现了策略模式的思想,提高了代码的通用性和扩展性。因此引入 KeyOfT,将“如何从数据中提取 key”这一逻辑抽象出来,实现数据结构与数据内容的解耦。KeyOfT 是一个仿函数,用于从存储的数据 T 中提取出 key。// 遍历旧表,顺手牵羊,把节点牵下来挂到新表。DELETE 可以复用。

2026-04-29 16:58:53 326

原创 C++ 模拟实现 AVL 树

​// 存储键值对// 三叉链:左孩子、右孩子、父节点​int _bf;// 平衡因子 balance factor​// 构造函数:_kv(kv),_bf(0){}pair<K, V>:存储 key-value 数据三叉链结构,方便旋转回溯_bf:平衡因子,控制平衡失衡类型条件旋转方式左左parent.bf = -1右旋右右parent.bf = 1左旋左右parent.bf = 1先左旋后右旋右左parent.bf = -1先右旋后左旋。

2026-04-28 16:06:12 244

原创 C++ 异常处理

实际开发中,不推荐直接抛 string/int,推荐自定义异常类,分类管理不同错误(输入错误、数学错误、逻辑错误等)。#include <exception> // 标准异常基类​// 自定义异常基类:继承标准库 exceptionprotected:// 存储异常信息public:{}​// 虚析构,保证多态析构​// 重写 what() 方法,返回异常描述​// 派生异常类:非法输入异常public:{}​// 派生异常类:数学运算异常public:{}

2026-04-28 09:55:53 216

原创 二叉搜索树

指针引用Node*&的核心价值递归插入/删除/销毁中使用,直接修改上层指针本身省略父节点记录,简化代码逻辑确保指针能被置空,避免野指针递归 vs 非递归非递归:效率高,无栈溢出风险,逻辑繁琐(需记录父节点)递归:代码简洁、可读性高,依赖Node*&实现指针修改,深度过大可能栈溢出BST 核心操作时间复杂度最优(平衡树):$O(\log N)$最坏(退化为链表):$O(N)$删除核心左右子树都不为空时,必须用替换法,保证 BST 性质不变。

2026-04-20 18:56:09 387

原创 多态相关内容

多态:同一接口,不同对象,表现出不同的行为// 同样调用 BuyTicket(),不同对象行为不同Person -> 全价Student -> 半价多态 =同一接口,不同表现条件:基类指针/引用虚函数 + 重写重写:三同(函数名 / 参数 / 返回值)必须 virtualoverride(检查)final(禁止继承/重写)

2026-04-19 16:03:52 179

原创 继承相关内容

C++ 继承用于代码复用,支持单继承和多继承。继承方式影响父类成员在子类中的访问权限,遵循最小权限原则。子类会隐藏父类同名成员,可通过作用域访问父类版本。构造顺序是先父类后子类,析构顺序相反。多继承可能带来二义性问题,菱形继承会导致数据冗余,可通过虚继承解决。

2026-04-19 15:53:59 167

原创 template—模板

/ a.h// 定义写在头文件里。

2026-04-19 15:26:42 219

原创 vector模拟实现

我们先实现一个简单的vector逻辑#pragma once#include<assert.h>#include<iostream>​namespace bit{ template<class T> class vector { public: typedef T* iterator; typedef const T* const_iterator;​ iterator begi

2026-04-17 21:22:53 420

原创 string的模拟实现

构造函数string(const char* str = "")//常量字符串默认结尾\0​​//string() //无参构造//{//}带默认参数的构造函数中,const char*用于指向常量字符,接收以\0结尾的字符串。当调用时不提供参数时,str取值由默认参数 “” 替代,空字符串在内存中占一个字符'\0';若默认参数采用nullptr则会导致返回的是空指针,一不符合构造函数中的strlen调用,二不符合创建空字符串的概念;也就是一个应该表示,而不是“未初始化的指针状态”。

2026-04-17 17:34:51 306

原创 【计算机网络】第六章·应用层

应用层的主要任务是通过应用进程的交互实现特定的网络应用,网络应用程序只运行在端系统中,运输层为其提供了端到端的进程间逻辑通信服务。

2024-02-18 16:38:28 1407

原创 【计算机网络】第五章·运输层

在计算机网络通信中,网络层提供了主机间的逻辑通信,通信两端主机中的进程为通信的真正实体,而运输层则直接提供应用进程间的逻辑通信。

2024-02-16 20:24:00 2284

原创 【计算机网络】第四章·网络层

网络层的主要任务是将分组从源主机经过多个网络和多发链路传输到目的主机,包括分组转发和路由选择两个部分分组转发:路由器接收分组后根据转发表进行转发路由选择:网络层决定哪一条路径传送分组核心思想:把网络中控制层面和数据层面分离,控制层面利用软件来控制数据层设备。

2024-02-06 18:15:36 2205 1

原创 【计算机网络】第三章·数据链路层(三)

由于无限电广播为圆形传播,当无线移动站A和B同时发送广播时,会存在AB的信号都到达接入点AP,但却无法到达对方站点的情况,此时AB无法接收到对方的无线信号,从而认为信道空闲。常见的VLAN实现机制是基于以太网交换机接口实现,该交换机需要具备1.能够处理VLAN标记的帧,即IEEE 802.1Q帧,2.支持不同的接口类型。对于802.11无线局域网来说,与共享式以太网的传输介质不同,因此不能使用CSMA/CD协议,而使用。的各帧,使用SIFS的帧类型有:ACK帧、CTS帧等。

2024-01-26 09:25:45 728

原创 【计算机网络】第三章·数据链路层(二)

用于建立、配置、测试数据链路的连接以及协商一些选项网络层PDU作为PPP帧的数据载荷被封装在PPP帧中传输包含多个协议,分别用来支持不用的网络层协议。

2024-01-25 15:25:41 1382

原创 【计算机网络】第三章·数据链路层(一)

链路:从一个节点到相邻节点到一段物理线路(中间无其他交换节点)数据链路:在链路上传输的数据,除链路本身外,还有一些必备的通信协议来控制数据传输,把 实现这些协议的硬件和软件加入链路中构成数据链路;其中的通信协议由网络适配器(物理层+数据链路层)和软件驱动程序实现帧:数据链路层对等实体在水平方向上进行逻辑信息通信的协议数据单元PDU。

2024-01-24 22:10:46 1263

原创 【计算机网络】第二章·物理层

接口特征:1.机械特征:形状,尺寸,引脚数目和排列,固定/锁定装置2.电气特征:信号电压范围,阻抗匹配情况,传输速率,距离限制3.功能特性:规定接口电缆各信号线的作用4.过程特性:规定信号线上传输比特的一组操作过程,包括各信号间的时序。

2023-11-13 18:38:18 217

原创 【计算机网络】第一章·计算机网络概述

电话交换机接通电话线的方式就是电路交换,使用电路交换进行通行有三个步骤:1.建立连接:从主叫方到被叫方之间建立一条专用的物理通路,为双方分配通信资源2.通话:双方占用通信资源进行通话3.释放链接:通话结束,该物理通路被交换机释放,将所占用的电信资源归还电信网特点:电路交换的延迟最低,适用于连续大量的数据且数据传输时间>>建立时间主机发送的整块数据被称为报文,分组交换是将该报文构造成若干个分组发送出去,分组传送途中的各交换节点对分组进行存储转发,目的主机收到后将其还原;

2023-11-09 12:37:34 213

原创 【计算机组成原理】第七章·I/O系统

I/O接口又称控制器,设备控制器,是用于协调主机和外设之间的数据传输。

2023-11-02 19:08:27 839

原创 【计算机组成原理】第六章·总线

1.总线的定义:总线是指一组能为多个部件共享的公共信息传送线路2.总线的特性:总线特性分为机械特性,电气特性,功能特性和时间特性3.总线设备:总线上所有连接的设备,按其对总线有无控制功能可分为主设备和从设备两种;主设备是指获得总线控制权的设备,从设备是指被主设备访问的设备,它只能响应主设备发来的各种总线命令。

2023-10-31 10:49:15 247

原创 【计算机组成原理】第五章·中央处理器

1.指令控制:完成取指令,分析指令,执行指令的操作,即程序的顺序控制2.操作控制:CPU管理并产生由内存取出的每条指令的控制信号3.时间控制:CPU为每条指令按时间顺序提供应有的控制信号4.数据加工:进行算术和逻辑运算5.中断处理:对计算机运行过程中产生的异常状况和特殊请求进行处理。

2023-10-29 20:40:54 1130

原创 【计算机组成原理】第四章·指令系统

指令是计算机执行某种操作的命令,是计算机运行的指令格式:一条指令通常包括操作码字段(OP)和地址码字段两部分(A)组成其中,操作码用于识别指令,地址码用于给出被操作信息的地址。指令字长与机器字长没有固定的关系,半字长指令,单字长指令则表明指令字长是机器字长的多少倍;该指令无需知名操作数,只给出OP操作码;通常用于:1.无需操作数的指令(如空指令,停机指令)2.堆栈计算机中,操作数隐藏在栈顶和次栈顶,计算结果压入栈顶。

2023-10-27 17:41:09 287

原创 【计算机组成原理】第三章·存储系统

通常来说,存储器由CPU-寄存器-Cache-主存-磁盘等等构成多级存储系统,从左向右存储空间逐步递增,单位价格与读取速度逐渐递减。其中,CPU可以直接访问Cache和主存;Cache-主存直接解决了主存与CPU速度不匹配的问题;主存-辅存直接解决了存储系统容量的问题。

2023-10-21 22:11:35 376 1

原创 【计算机组成原理】第二章·数据的表示和运算

十进制转换为二进制:整数部分除基取余,小数部分乘基取整(在计算机即二进制中,整数部分是连续的,任何整数都可以用二进制表示,而小数部分是离散的,并非所有小数均可转换成二进制)计算机使用二进制有如下好处:1.可以使用两个稳定状态的物理器件表示0/12.0/1对应假/真,方便实现逻辑运算3.可以通过逻辑门电路实现算术运算。

2023-10-15 21:31:02 703 1

原创 【计算机组成原理】第一章·计算机系统概述

高级语言:(C,C++,Java...)为方便程序设计人员写出解决问题的处理方案和解决过程的程序。2.吞吐量:系统在单位时间内处理请求的数量,从用户观点看,吞吐量是衡量计算机系统性能的综合参数。eg: 已知MAR为32位,MDR为8位,则总容量=2^32 *8bit = 4GB。链接:将多个可执行文件与标准库函数合并成一个可执行的目标文件,最终结果保存在磁盘中。机器语言:又称二进制代码语言,需要编程人员记忆每条指令的二进制编码,是。数据通路:数据在功能部件中传送的路径,由控制部件产生的控制信号建立。

2023-09-25 22:45:27 293 1

原创 【Linux】操作系统与进程概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等等)

2023-08-12 18:50:10 189 1

原创 【C++】详解C/C++内存管理

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是: new/delete申请和释放的是单个元素的空间,new[ ]和delete[ ]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new 在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成 空间中资源的清理。当原空间后面足够大,在原空间上追加空间;

2023-06-28 22:02:01 196 1

原创 【C++】详解类和对象

类和对象的初理解

2023-06-25 21:59:08 529 1

原创 【C++】命名空间/重载/缺省/引用/内联函数/auto关键字

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。C++11中,标准委员会赋予了auto全新的含义:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。内联函数使用时,声明和定义不可分离,即需要放在同一项目中。

2023-04-27 20:32:24 358

原创 【数据结构】逐字分析函数栈帧的创建与销毁全过程

探究函数栈帧的创建与销毁

2023-04-03 18:09:55 416 3

原创 【数据结构】栈&队列OJ

我们使用两个队列,一个存放数据一个为空,当push数据是,我们就在q1处入队列,而当要出栈的时候,我们把q1的数据移到q2中即可,最后再将q1中仅剩的数据返回值并出队列。本题设置了front与rear结构,因此在取头尾的时候直接利用front和rear即可获取元素下标,但是要注意的是,因为是循环队列,在取队尾的时候要取队列长度的模。如何用栈实现队列呢?我们知道,栈和队列的首要区别就在于数据操作方式,栈是FILO,而队列则是FIFO,要想用两个栈实现队列,那就需要不断变换两个栈里的内容。

2023-04-01 20:19:12 207 2

原创 【数据结构】栈&队列

队列与栈不一样的地方在于队列支持的是FIFO操作,因此我们要不断变化队首的元素,如此一来,用数组实现的话,每次操作都会调动整个数组,严重影响效率,但是链表可以支持头插头删,这样一来,FIFO的问题便可迎刃而解。如果用链的话,每次出栈都需要找到尾结点的前一个,会造成许多不必要的麻烦,当然双向链表可以解决这个问题,但是仔细想想,似乎用数组来的更方便一些。由于栈是由数组模拟实现的,入栈和出栈其实也就是对数组进行插入删除,但要特别注意的是,top指向的是栈顶元素的下一个位置。越努力,越幸运,加油!

2023-03-30 20:55:57 189 1

原创 【数据结构】链表OJ

a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c) 由此可知,从相遇点到入环点的距离加上n−1 圈的环长,恰好等于从链表头部到入环点的距离。因为合并链表需要进行头插,我们可以设置哨兵为的头节点来方便操作,但是原链表是无哨兵位的,因此在返回时要返回lesshead->next;本题我想到的是先遍历计数两个链表的长度,然后双指针让长链表先走长度差,之后两个指针再一起走,找到共同节点。当然,本题还有另一个思路,我们可以在slow和fast指针相遇点断开链表,接着把问题转换成两个相交链表求交点。

2023-03-29 18:01:15 263 1

原创 【数据结构】单链表升级——带头双向循环链表

由于双向循环链表的插入删除操作类似,因此只将头插头删进行简单概要。双向循环链表的功能与单链表无异,并且虽然该链表看起来结构更加复杂,但实现方式却比单链表容易很多。同样,双向循环链表的实现方式与单链表基本无异,只是多了一个指向前一个位置的prev指针。而删除也较为简单,但是要控制好prev指针和next指针,防止出现“野”的现象。循环链表是链表的一种形式,而带头则是指链表中多了一个哨兵位的节点。带头循环双向链表与单链表的联系密不可分,大家可以将两篇内容连起来学习。而销毁也只需从头遍历释放即可。

2023-03-26 22:59:39 346 2

原创 【数据结构】多图警告!单链表的操作实现以及原理

对于给定的pos位置进行增删,原理与头尾的操作相似,但是如果pos在链表中间位置,则需调整pos位置的前一个的next,当然如果pos本身就是头尾,那其实与上面的操作无异。单链表作为一种链式数据存储结构,能实现的操作有查看数据(打印)、增加数据(头插尾插)、删除数据(头删尾删)、插入数据、查找特定数据、删除特定位置的数据等操作。特别注意的是,由于尾删时需要先找到尾节点的位置,如果我们直接将尾节点置为空,则会形成尾指针为野指针的现象,因此我们要找尾节点的上一个next并将其置为空。答案还是看物理结构。

2023-03-26 17:14:00 650 1

原创 【C++之STL初步】——排序检索与vector

排序搜索与vector

2023-01-21 16:20:57 653 2

空空如也

空空如也

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

TA关注的人

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