- 博客(32)
- 收藏
- 关注
原创 【Linux】进程初阶(2)——进程状态
本文摘要: 本文详细介绍了Linux操作系统中的进程状态及其管理机制。首先从宏观角度阐述了进程的运行、阻塞和挂起三种基本状态,然后重点分析了Linux特有的进程状态分类(R运行、S浅度睡眠、D深度睡眠等)。文章特别探讨了两种特殊进程状态:僵尸进程(子进程终止但父进程未回收资源)和孤儿进程(父进程先终止时由系统进程接管)。通过代码示例和状态监控命令,展示了这些状态的实际表现,并解释了它们对系统资源管理的影响。全文为理解Linux进程管理提供了系统性的知识框架。
2025-10-29 21:44:06
777
原创 【Linux】进程初阶(1)——基本进程理解
本文介绍了Linux系统中进程的基本概念和管理方法。首先解释了进程是程序动态执行时的实体,由PCB(进程控制块)和程序代码数据组成。重点讲解了Linux中PCB的具体实现task_struct结构体,包含进程标识符、状态、优先级等关键信息。详细介绍了查看进程的方法和系统调用操作,包括获取进程ID(getpid/getppid)和创建子进程(fork)。其中fork系统调用会创建子进程并分别返回不同的值,父进程得到子进程ID而子进程得到0。文章还通过代码示例演示了这些系统调用的使用。
2025-10-24 09:40:58
841
1
原创 【C++】C++11特性学习(1)——列表初始化 | 右值引用与移动语义
本文详细介绍了C++11中的三个重要特性:列表初始化、右值引用和移动语义。在列表初始化部分,阐述了新旧{}初始化方式的区别,initializer_list容器的使用及其与列表初始化的关系。右值引用部分讲解了左值/右值概念、右值引用特性及其与move语义的结合。移动语义部分重点分析了移动构造和移动赋值的实现原理,通过string类示例展示了如何通过资源转移而非拷贝来提升性能。这些特性共同构成了C++11对性能和语法的重要改进,为现代C++编程提供了更高效的工具。
2025-10-24 09:38:55
622
原创 【Linux】基本指令(入门篇)(下)
本文续【Linux】基本指令(入门篇)(上)继续探讨Linux基本入门指令与其内在基础理论,主要涉及指令相关指令、压缩与打包相关指令、网络传输了解等。
2025-10-21 19:01:57
1294
原创 【Linux】进程基础——硬件结构与操作系统
本文首先介绍了冯诺依曼体系结构的五大硬件组成及其"输入-计算-输出"的数据处理逻辑,重点阐述了内存作为中间层对提升计算机整体效率的关键作用。随后深入探讨了操作系统的核心概念,包括其设计目的、管理方式以及系统调用机制。特别强调了操作系统通过"先描述,再组织"的管理模式,将复杂资源抽象为数据结构进行高效管理。最后指出系统调用和库函数作为用户程序访问系统资源的桥梁,既保证了系统安全又提供了编程便利。全文为理解计算机系统运行机制和进程概念奠定了重要基础。
2025-10-20 10:54:45
685
原创 【C++】map与set底层结构——红黑树
本文详细介绍了红黑树的概念、规则及其实现。红黑树是一种自平衡二叉搜索树,通过颜色约束确保路径长度不超过两倍。文章首先阐述了红黑树的四个核心规则,包括节点颜色、根节点为黑、红节点子节点必为黑、各路径黑节点数相同。随后重点讲解了红黑树的插入操作,分析了三种处理情况(变色、单旋+变色、双旋+变色)及其实现代码。最后介绍了红黑树的查找功能和验证方法,通过检查四个规则来确保树的平衡性。测试代码展示了红黑树的具体应用场景。本文为理解STL中map和set的实现原理提供了重要参考。
2025-10-03 22:47:36
1065
原创 【C++】map与set的底层实现——AVL树
本文详细介绍了AVL树的结构与实现。AVL树是一种自平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡。文章首先阐述了AVL树的概念和平衡因子机制,然后重点讲解了其实现过程。主要包括:1. 树节点结构设计;2. 插入数据时的平衡因子更新规则;3. 四种旋转操作(右单旋、左单旋、左右双旋、右左双旋)的实现细节;4. 其他功能如遍历、平衡性检测和查找操作。AVL树通过旋转操作保持平衡,确保查找、插入、删除等操作的时间复杂度稳定在O(logN),相比普通二叉搜索树有本质提升。
2025-09-21 14:14:16
988
原创 proj包基础开发调用
PROJ 的主要目的是将坐标从一个坐标参考系转换到另一个坐标参考系。这可以通过自带的命令行应用程序或软件包中的 C API 来实现。下面主要介绍如何用C++通过调用API来实现基本的坐标转换和投影操作。
2025-09-19 19:19:24
948
原创 【C++】模板的进阶使用
本文深入探讨C++模板的高级用法,主要包括非类型模板参数和模板特化两大核心内容。非类型模板参数允许使用整型常量作为参数,典型应用如STL中的array容器,相比原生数组更安全高效。模板特化分为函数模板特化和类模板特化,其中类模板特化又包含全特化(完全确定所有参数)和偏特化(部分参数特化或添加限制条件)。文章通过具体代码示例展示了这些技术的实际应用场景,如处理指针类型的特殊比较、容器类的特化实现等,帮助开发者根据需求选择合适的技术方案(函数重载或模板特化)来提升代码的灵活性和安全性。
2025-09-11 14:50:48
1063
1
原创 【C++】STL二叉搜索树——map与set容器的基础结构
摘要:本文详细介绍了二叉搜索树(BST)的概念、性能分析和实现方法。二叉搜索树是一种高效查找结构,具有左子树值≤根节点≤右子树值的特性。文章分析了BST的最优(O(logN))和最差(O(N))查找性能,并对比了其与二分查找的优缺点。重点阐述了BST的创建、插入、查找和删除操作的实现细节,包括迭代和递归两种实现方式。针对复杂的删除操作,详细说明了三种不同情况的处理策略,并提供了完整的C++实现代码。本文为后续学习STL的map和set容器打下基础,是理解高效搜索数据结构的重要入门内容。
2025-08-11 21:34:13
1003
原创 【C++】STL——priority_queue的使用与底层模拟实现
本文详细讲解了C++ STL中priority_queue的使用和模拟实现。优先级队列是一种容器适配器,基于堆结构实现,默认是大堆(less),可通过greater参数改为小堆。文章介绍了仿函数的概念及其在比较操作中的应用,并重点展示了priority_queue的模拟实现过程,包括push、pop、top等核心接口以及向上/向下调整算法。最后通过迭代器构造完善了功能,给出了完整的priority_queue类模板代码,实现了与STL相似的优先级队列功能。
2025-08-11 21:34:03
1019
原创 【Linux】基本指令(入门篇)(上)
本文介绍了Linux系统基本目录和文件操作指令,包括ls、pwd、cd、mkdir等目录操作指令,以及rm、cp、mv等文件操作指令。重点讲解了Linux文件系统的树形结构特点,根目录、绝对路径和相对路径的概念,以及"一切皆文件"的设计哲学。文章还涉及文件属性、隐藏文件、输入输出重定向等核心概念,通过CentOS 7.9环境下的实际操作演示,帮助读者理解Linux系统的基本操作原理。这些指令和概念是使用Linux系统的基础,后续会继续深入讲解相关理论知识。
2025-07-18 20:25:51
913
原创 STL详解——list的模拟实现
STL中的list容器不同于数据结构中常见的单链表,而是一种带头双向链表,因此在实现过程中也以此结构为基础实现。T val;完成结点的定义后,我们便成将list容器抽象为以头结点(哨兵位)为头的多结点链,结点间能通过彼此互相访问。因此list的成员变量便是头结点(_head)。
2025-06-08 19:31:36
880
1
原创 STL解析——list的使用
STL容器中提供的list容器也是一种顺序容器,底层实现方式是带头双向链表,这种实现方式能比单链表更高效的访问数据。下面围绕部分重要接口的使用展开讲解。
2025-06-02 18:21:51
1282
原创 STL解析——String类详解(使用篇)
在C语言中字符串底层实际是以'\0'结尾的字符数组,而这样操作方式并不是很方便,因此C++中将字符串封装成了独立的sring类,下面就来详细了解下string类的使用。以下内容均参考。
2025-05-30 11:30:00
953
原创 STL解析——vector的使用及模拟实现
在C++中vector算正式STL容器,功能可以类比于数据结构中的顺序表,用法可以看作简化版的string。
2025-05-30 11:29:38
1195
原创 C++入门篇——类和对象(下)
之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。class Datepublic://构造函数:_year(1), _day(1)private:int _year;int _month;int _day;return 0;
2025-05-11 21:34:48
1348
原创 C++内存管理详解
new和delete是C++中用于动态管理内存的运算符//管理对象//管理对象数组int main()test1;return 0;具体分析如下:既然new和delete与C中动态内存管理差不多,那为什么还要设计这两个运算符呢?C++中引入了自定义类型,为自定义类型开辟空间也算实例化的一种,但使用malloc等函数无法在开辟内存时调用构造初始化,所以在C++中引入new和delete来动态管理自定义类型空间。
2025-05-11 21:34:33
802
原创 C++类和对象详解(中续)
运算符重载的设计依旧是为了完善自定义类型的功能,对于内置类型(以整型为例),可以进行大小比较、四则运算等运算符的计算,但对于自定义类型要怎么比较大小呢?可以直接用默认运算符吗?显然是不能的。当运算符被⽤于类类型的对象时,C++语⾔允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使⽤运算符时,必须转换成调⽤对应运算符重载,若没有对应的运算符重载,则会编译报错运算符重载是具有特殊名字的函数,他的名字是由operator和后⾯要定义的运算符共同构成。
2025-05-03 00:20:41
917
2
原创 C++类和对象详解(中)
类中的默认成员函数就是用户没有显示实现,编译器会⾃动⽣成的成员函数。⼀个类,在不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,后面两个了解下即可。其次在C++11后还增加了两个新的默认成员函数,这个我们在后面再分析。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯去学习:(1)我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。(2)编译器默认⽣成的函数不满⾜我们的需求,我们需要⾃⼰实现,那么如何⾃⼰实现?
2025-05-03 00:20:24
1105
1
原创 C++入门篇——引用详解
C++中引入的引用,顾名思义就是引用一个对象的名字,传递给另一对象名,也可理解为取别名。引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。抽象点就像⽔壶传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋⻛";林冲,外号豹⼦头。都是同一对象,只是名称有所区别。这里的类型包括了所有之前学过的数据类型,像整型、指针类型、结构体类型等。但引用在定义时也需注意以下问题:1.引用的别名不能与引用对象相同。
2025-04-23 21:50:56
1158
2
原创 C++类和对象详解(上)
inline是在C++中新引入的内联功能,由inline修饰的函数为内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就不需要建⽴栈帧了,进而提⾼效率。通俗来讲就是函数像宏函数预处理一样展开函数,不会再像平常函数一样在栈区调用。但与宏函数不同的是,内联函数书写更为简单不易出错。以求和函数为例//宏函数定义//内联函数定义在定义宏函数时,除非经常刻意使用宏,那么很容易将宏函数写错,并且宏函数语法错误很少,项目中很难检测出来。而对于函数而言,则很少会出现这种情况。
2025-04-23 21:50:40
802
原创 C++入门篇(从C过渡C++)
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响。
2025-04-19 09:47:14
1030
原创 C语言初阶数据结构——栈和队列
对于栈的定义:需要数组来进行数据的储存,再联想动态顺序表的定义,还需要引入元素个数以及空间大小。int top;}Stack;介绍完队列的逻辑结构,下面就要讨论队列的物理结构。队列底层结构的选择同样即能使用数组也能使用链表。但使用数组的话,对队头数据进行操作时会涉及数组的重新排列,效率会比较低,因此下面将使用链表结点的方式实现队列相关功能。//定义队列结点}QueueNode;//定义队列}Queue;。
2025-04-19 09:46:48
655
原创 C语言初阶数据——单链表
链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表实质上也是一种线性表,不过与顺序表不同的是物理结构上并不一定是连续的。这里便要谈到链表的结构: 不妨将链表看作一辆火车,链表的每个数据就是车厢,并且每节车厢是彼此连接着的,从前一节车厢可以访问到下一节车厢,但是每节是互不影响的,一节车厢的删除与增加并不会影响其他车厢里的内容。接下来记住车厢的形状,让我们正式进入链表。在一个简单的链表中,我们的每个“车厢”需要包含需要储存的数据(data)以及链接下一节“
2025-04-06 23:13:18
829
原创 LeetCode第189题.轮转数组深度解析
大家好,今天小编给大家带来的是一道轮转数组的算法题,这道题也算我第一次深度思考算法题,因此想做做记录,后面也会继续分享遇到的些算法题。轮转数组原题链接。
2025-03-25 18:57:53
976
原创 C语言初阶数据结构——顺序表(Sequence List)
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使 ⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...线性表的逻辑结构一定是线性的,即数据元素之间的抽象关系是连续的一条直线;而线性表的物理结构不一定是线性的,即在计算机内存中不一定是储存在连续的内存中。
2025-03-23 19:57:58
469
原创 C语言:字符函数与字符串函数
字符分类函数主要是判断字符所属的类型,使用该函数时需引用<ctype.h>头文件,属于函数判断的类型时会返回真,否则会返回假。其中具体库函数如下:可看出islower函数实际功能与if(c > ='a' && c <= 'z')类似。
2025-03-04 20:31:34
1007
原创 C语言指针入门
C语言作为一种计算机语言,其本质是根据需要来运用计算机内存,代码运行的同时也是在调用计算机内存。内存在计算机中就像一个个小型单位,最小单位为bit(比特位),一个比特位可储存一个二进制数,之后满足每1024进1级单位依次为Byte(字节)、KB、MB、GB、TB、PB。而仅有内存是无法准确调用所需要的内存的,于是便有了地址,通过地址来指向每一区域内存,从而能更精确快速的访问调用所需的内存,从而地址起到了指向内存的作用,因此也被叫做指针。
2025-02-09 13:47:39
582
原创 C语言内置数据类型
C语言中内置数据类型大体可分为整形、浮点型、字符型三类,在C99标准后还引入了布尔类型。本文章将从每种数据类型的语法标准,使用,意义等方面详细分析。其中代码均以VS2022为参考。字符型数据在C语言中用char表示,占用内存为1个字节,在计算机中以ASCII值的形式储存,其中可显示字符如下表在C99标准中引入的布尔类型其主要为判断真假数据,即真(true)与假(false),使得C语言中有了更为标准的真假数据引用,当然其中假也可用0表示,真可用!0表示,0为假可看作底层逻辑,
2025-01-18 14:34:36
1185
原创 始于C的编程梦
我是一个双非本科地理信息科学专业的学生,浑浑噩噩中已经度过了大学第一个学期。作为非计算机类专业学生,在本学期中很庆幸能接触到C语言,发现了自己在编程方面的兴趣,也算是一种偶然的启蒙吧,由此有了深入学习编程的想法。
2025-01-13 10:55:17
381
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅