自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】简易版Shell实现(附源码)

本文介绍了如何基于Linux进程控制接口实现一个简易的Shell。首先分析了Bash的工作流程,包括打印命令行提示符、获取用户输入、解析命令行、执行命令等步骤。接着,通过代码实现了命令行提示符的打印、用户输入的获取以及命令行的解析。具体实现中,使用getenv函数获取环境变量中的用户名、主机名和路径,并通过fgets读取用户输入的命令行,最后使用strtok函数对命令行进行分割,提取出命令和参数。该简易Shell虽然功能简单,但有助于深入理解Shell的工作原理。

2025-05-18 21:05:15 1148 37

原创 【Linux】进程控制

进程控制是操作系统中管理和调度进程的关键功能,涉及到进程的创建、终止、等待、程序替换以及进程间通信等多个方面,简而言之,进程控制确保操作系统能够有效地管理并协调不同程序的执行。对于我们而言,要对进程进行相关操作,就要深入理解操作系统对进程的控制机制,并熟悉Linux下进程控制的相关接口。本篇文章,我们学习了进程控制的概念及进程创建、进程终止、进程等待和进程程序替换的相关Linux常用接口,学习了这些接口,想必大家能够更好地理解和掌握Linux系统中的进程控制技术。

2025-05-05 22:27:14 2669 49

原创 【Linux】深入理解程序地址空间

程序地址空间是指操作系统为一个程序分配的内存范围。在现代操作系统中,每个程序在运行时都有自己的程序地址空间。供操作系统使用,与其他部分形成隔离,程序无法访问。存储函数的局部变量和函数调用的上下文等。3. 内存映射段(共享区):为支持文件的高效访问或多进程的数据共享而划分的一块区域,通常包含文件映射、动态库和匿名映射等。动态内存分配所用区域,需要手动管理。存储未初始化的全局变量和静态变量。存储已经初始化的全局变量和静态变量。存放程序的可执行代码和只读常量,该区域通常只读,不可修改。

2025-05-04 22:40:55 1880 28

原创 【Linux】命令行参数与环境变量

 在日常使用和开发中,Linux命令行以其强大而灵活的特性备受欢迎。而命令行参数与环境变量则是驱动这一强大工具的核心元素。通过合理地使用参数,我们可以精确控制命令的行为;借助环境变量,则能够配置和影响系统及程序的运行环境。本文将带你了解Linux命令行参数和环境变量的基础知识,帮助你更高效地驾驭Linux系统。

2025-05-04 16:02:11 1906 20

原创 【Linux】进程优先级与进程切换理解

进程优先级是操作系统分配给进程的一种“权重”或“级别”,用来决定在多个进程同时竞争 CPU 资源时,哪一个进程先获得运行的机会。优先级高的进程会被优先调度执行,低优先级的进程则可能需要等待。本篇文章,我们系统地了解了进程优先级的定义、意义以及在Linux下的调整方法,也梳理了进程切换的基本流程与核心作用。从进程优先级到切换机制,再到Linux的O(1)调度算法,这些知识共同揭示了操作系统在多任务管理中的高效与精妙。掌握这些原理,有助于更深入理解和优化 Linux 系统的性能,为后续程序地址空间和进程控制。

2025-05-03 21:02:27 2295 31

原创 【c++11】c++11新特性(下)(可变参数模板、default和delete、容器新设定、包装器)

本篇文章我们学习了c++11的四个新语法:可变参数模板、default和delete、容器的新设定和函数包装器。它们大大提高了c++编程的灵活性,也提高了我们的开发效率。之后博主会和大家分享智能指针以及其他包装器的相关知识和用法。

2025-04-25 16:25:17 1257 37

原创 【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)

本篇文章,我们主要学习了c++11的部分新特性:列表初始化、右值引用、类的新默认成员函数和lambda表达式。通过剖析引用折叠、完美转发等底层机制,lambda的多种捕捉方式与适用场景,希望能帮助大家在资源管理、代码简洁性及性能提升之间找到平衡。之后博主会和大家分享c++11其他的新特性,如可变参数模板、包装器、智能指针等。

2025-04-09 22:09:36 1407 48

原创 【数据结构进阶】位图

位图,这一简洁而高效的数据结构,以其独特的二进制存储方式,在数据处理领域展现了强大的生命力。尽管存在局限性,它仍是解决特定问题的利器,并为更高级的数据结构,如布隆过滤器奠定了基础。在数据爆炸的时代,位图的思想将继续闪耀,为高效数据处理提供源源不断的灵感。

2025-03-22 18:33:56 1536 38

原创 【c++】异常处理

当程序在运行过程中出现问题,没有达到理想效果时,异常可以帮助我们对这些问题进行通信并做出相应的处理,将问题的检测与解决问题的过程分离开,更好地应对大型项目可能出现的各种情况。相比于C语言处理错误的方式--返回错误码,我们在c++中,遇到异常时可以抛出一个对象,该对象所携带的错误信息可以更加全面。本篇文章,我们主要学习了异常的使用方法及其处理机制。相比c语言错误码的方式,c++的异常可以更加全面地处理程序出现的问题。但异常也有些缺点,例如造成程序执行混乱,内存泄漏等等。

2025-03-21 13:46:14 1182 24

原创 【Linux】进程概念和进程状态

通过学习进程的创建、调度、同步等机制,你可以更好地掌握操作系统的运行原理,进而优化系统性能和解决实际问题。本文将从基础知识入手,带领大家逐步深入探索 Linux 中进程的各个方面,帮助你在 Linux 学习的道路上迈出坚实的第一步。

2025-03-15 21:49:55 1562 27

原创 【Linux】冯诺依曼体系与操作系统理解

通过对冯诺依曼体系结构的理解,我们掌握了计算机的基本工作原理,而操作系统的概念、存在意义及管理方式的学习,则为我们揭开了计算机资源管理的核心机制。特别是对系统调用的深入理解,为我们后续学习Linux系统编程奠定了坚实的基础。

2025-03-08 20:31:47 1635 30

原创 【Linux】vim使用与配置教程

vim是一款功能强大且高度可定制的文本编辑器,掌握其常用模式(命令模式、插入模式、底行模式)和基本操作是提升编辑效率的关键。通过本文的介绍,想必大家已经了解了如何在命令模式下快速移动光标、复制粘贴文本,在底行模式下执行搜索替换、保存退出等基本操作,以及一些实用的配套技巧。此外,我们还探讨了如何通过简单的配置让vim更符合个人使用习惯。

2025-03-06 00:57:31 2273 25

原创 【数据结构进阶】哈希表

哈希表是一种基于哈希函数的高效数据结构,其通过数据映射,支持O(1)级别的查找、插入和删除操作。哈希表有多种实现方法,我们实现了开放地址法(线性探测)和链地址法两种。开放地址法适用于低负载、节省空间,但处理冲突时可能导致探测成本增加;链地址法适用于高负载,扩展性更强,但需额外存储指针。合理选择哈希函数和冲突解决策略是优化哈希表性能的关键。

2025-02-24 15:31:34 1576 24

原创 【c++丨STL】基于红黑树模拟实现set和map(附源码)

本篇文章,基于之前实现的红黑树代码,我们将仿照SGI STL的实现方式,尝试对同一棵红黑树进行封装和一系列适配修改,模拟实现set和map两种容器。

2025-02-13 16:29:02 1106 23

原创 【Linux】深入理解linux权限

本篇文章,我们深入探讨了Linux系统中的权限管理,包括权限的概念、用户角色、文件属性及其权限设置的操作方法。了解并掌握这些内容对于管理Linux系统的安全性至关重要。通过合理配置文件权限和用户角色,可以有效控制文件访问、提高系统的安全性和灵活性。

2025-02-10 14:03:15 2542 26

原创 【数据结构进阶】红黑树超详解 + 实现(附源码)

红黑树(Red-Black-Tree)是一种自平衡二叉搜索树,但它并非像AVL树那样“严格平衡”,而是允许一定的不平衡存在,在保证增删查改效率没有太大影响的情况下,显著减少了平衡调整的次数,提升总体效率。AVL树一般通过节点的“平衡因子”来维持平衡,而红黑树通过给节点“着色”,确保其高效性。

2025-01-23 14:48:26 1650 27

原创 【c++丨STL】map/multimap的使用

与set相同,map的底层也是基于红黑树实现的,其内部元素根据键自动升序排列。但两者有如下区别存储内容:set存储的是键,而map存储的是键值对(数据元素是一个pair。元素访问:set只能访问键,而map可以通过键来访问对应的值,并且值可以支持修改。因此,set适用于唯一元素的集合操作,如去重;而map更适用于处理键值关系。相比map,multimap支持多个相同键存在。

2025-01-19 17:47:59 1238 20

原创 【c++丨STL】set/multiset的使用

set(集合)和multiset(多重集合)是STL中的容器,分别用于处理唯一元素和允许重复元素的场景,它们的底层结构都是红黑树(一种自平衡二叉搜索树)。set和multiset有以下共同特点:1. 容器元素自动按照升序排列(也可通过传入第二个模板参数调整排序规则)。2. 元素插入、删除、查找的时间复杂度均为O(logN)。set和multiset的核心区别是:set不允许容器内有重复元素,能够达到去重的效果;而multiset支持插入重复元素。鉴于set和multiset的接口功能。

2024-12-20 19:22:09 1619 35

原创 【数据结构进阶】AVL树深度剖析 + 实现(附源码)

本篇文章主要内容:AVL树底层结构解析、c++代码实现以及key/key_value场景分析。之前,我们学习了一种特殊的二叉树结构——二叉搜索树。它最大的好处在于,能够在平均情况下提供O(log n)时间复杂度的查找、插入和删除操作。然而,当数据的插入顺序与理想情况大相径庭时,传统的二叉搜索树可能会退化成接近单支树的形态,导致其查找效率骤降至O(n)。为了弥补这一缺陷,计算机科学界孕育出了一种更加精巧的数据结构——AVL树。

2024-12-12 12:14:33 1915 36

原创 【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)

本篇文章,我们学习了面向对象编程的最后一点特性——多态。从多态的概念、多态的构成条件到多态的实现、多态的原理,以及多态在编程中的应用,我们进行了全面而深入的学习。

2024-12-08 21:34:56 1238 31

原创 【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)

继承(inheritance)是面向对象编程当中实现代码复用最重要的手段。继承允许我们在原有的类的基础之上进行扩展,创建一个新的类(叫做子类或派生类),该类可以继承原有类(叫做父类或基类)的属性和方法。继承体现了面向对象编程的层次结构--从简单到复杂的过程。

2024-12-05 21:05:53 1340 28

原创 【数据结构】二叉搜索树(二叉排序树)

二叉搜索树(Binary Search Tree),也叫二叉排序树或者二叉查找树, 是一种特殊的二叉树结构。它或者是一棵空树,或者具有以下特点:1. 如果根节点的左子树不为空,则左子树上的所有节点都小于等于根节点的值。2. 如果根节点的右子树不为空,则右子树上的所有节点都大于等于根节点的值。3. 它的每一棵子树也都符合前两点特性(每棵子树也都是二叉搜索树)。简单地说,二叉搜索树是一棵中序遍历结果有序的二叉树。一般情况下,二叉搜索树不允许有相同的值出现。

2024-11-27 09:32:19 2032 44

原创 【c++】模板详解(2)

今天, 我们学习了非类型模板参数、模板特化以及模板分离编译的相关知识,进一步加深了对模板的理解。

2024-11-25 22:37:05 1275 27

原创 【c++丨STL】priority_queue(优先级队列)的使用与模拟实现

优先级队列是一种容器适配器,根据某种严格的弱排序标准,特别设计为它的第一个元素总是它所包含的元素中的最大元素。虽然它的名字叫“优先级队列”,但实际上它跟队列没有什么关系,它的底层结构是堆。既然它的底层结构是一个堆,那么它也就符合堆的所有性质,例如不能遍历、只能从堆顶出入数据等。

2024-11-21 22:25:15 1342 23

原创 【c++丨STL】stack和queue的使用及模拟实现

与vector、list这些容器不同,stack和queue被称作容器适配器。所谓容器适配器,就是指在一种已有的容器基础上,为其添加了一些新的特性或者功能,目的是使一事物的行为类似于另一类事物。比如说栈这一数据结构,它的本质其实就是对顺序表或者链表的功能进行了一些限制,例如无法遍历、只能在一端进出数据等,但其底层仍然是顺序结构或是链式结构。STL在设计stack和queue时,并没有从零开始构建它们的底层结构,而是采用了这种设计思想,对现有容器进行了封装,从而实现了它们。

2024-11-20 19:56:41 1481 28

原创 【c++丨STL】list模拟实现(附源码)

本篇文章,我们在掌握list使用方法及其底层原理的基础上,模拟实现出了list容器。由于底层数据内存的非连续性,它的迭代器实现与vector、string有较大差异。

2024-11-19 22:00:42 1220 26

原创 【c++丨STL】list的使用

之前我们已经学习了string、vector两个容器的使用方法及模拟实现,今天跟大家介绍list的使用方法。在STL中,尽管容器各异,但同名接口的功能往往是相似的。因此,在我们掌握了少数几个容器的使用方法后,对于未曾接触过的其他容器,只要了解其底层数据结构,就基本能够上手使用它们。list是STL中的一种容器,用于表示链表结构,底层实现是一个双向带头循环链表。

2024-11-13 21:36:24 1691 33

原创 【c++丨STL】vector模拟实现

与传统的动态顺序表不同,它采用了三个迭代器来维护数组,提高了程序灵活性。也正因如此,它的实现难度也有所增大,对于细节把控的要求也很高。

2024-11-09 19:16:15 1504 25

原创 【c++丨STL】vector的使用

vector是STL中的一种容器,它用于表示可变大小的数组,底层使用动态顺序表实现。相比传统的数组,vector附带了一系列操作接口,并且由于内存是动态分配的,所以不必担心插入元素时内存不足的问题。由于vector强大的功能和灵活性,我们在c++编程中经常使用vector来表示内存连续的序列。我们使用vector时,要引头文件,并且该容器定义在命名空间std当中。今天我们学习了STL另一个容器--vector的使用。不难发现,

2024-11-06 22:49:14 1349 23

原创 【Linux】基础指令

Linux是一种自由和开放源码的类Unix操作系统,它最初由芬兰程序员林纳斯·格瓦兹(Linus Torvalds)于1991年开发。该系统基于Unix操作系统,继承了Unix以网络为核心的设计思想。在服务器管理、软件开发,还是日常办公当中,Linux都扮演着不可或缺的角色。开源性:Linux是开源的操作系统,任何人都可以查看、修改、分发Linux的源代码。多用户多任务:支持多个用户同时操作,执行多项任务。稳定性:Linux系统以其出色的性能稳定性和高可靠性,在服务器开发领域有着广泛的应用。安全性。

2024-11-01 21:20:45 1695 32

原创 【c语言】运算符汇总(万字解析)

今天博主跟大家分享了c语言中各种操作符的功能、使用方法以及优先级和结合性,并且与大家深入探讨了表达式求值的两个重要规则--算数转换和整形提升。学习这些知识对我们的C语言和C++学习都有着极大的帮助。

2024-10-29 22:37:12 2074 32

原创 【c++丨STL】string模拟实现(附源码)

今天,我们在学会使用string类的基础上模拟实现了string类的常用功能,这对于我们学习数据结构和string类有很大帮助。之后博主会和大家一起进入下一个容器——vector的学习。

2024-10-24 15:38:23 1903 33

原创 【c++丨STL】string类的使用

今天,我们正式进入了STL的大门,学习了第一个容器——string。string虽然接口较多,但是它的实用性很高,为我们处理字符串提供了很多便利。由于其中一些接口并不是很常用,博主就没有过多赘述,大家可以在cplusplus官网进一步了解它们。之后博主会和大家一起,在熟练运用的基础上,深入其底层,并尝试模拟实现string类。

2024-10-20 01:26:38 1404 38

原创 【c++】STL简介

STL(Standard Template Library,标准模板库),是c++标准库的一个重要组成部分,它提供了一系列通用的类模板和函数,是一个包罗数据结构和算法的软件框架。STL的出现弥补了c++开发效率的不足,大大提高了程序的可复用性。

2024-09-21 17:36:18 1741 29

原创 【c++】模板详解(1)

今天我们学习了c++的模板,它分为函数模板和类模板,是泛型编程的基础,为我们提供了很多方便。

2024-09-20 22:54:45 1050 19

原创 【c++】动态内存管理

1. new:首先调用operator new函数申请内存空间,然后调用构造函数,完成初始化2. delete:首先调用析构函数,对开辟的内存进行资源清理,然后调用operator delete函数释放内存3. new[]:首先调用 operator new[ ] 函数申请多个对象的内存空间(该函数中调用了operator new),然后调用N次构造函数,完成初始化。

2024-09-20 20:15:31 1386 26

原创 【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)

今天我们学习了类和对象相关的新概念和知识,例如:取地址重载、static修饰成员、友元、内部类等,它们对于我们深入学习并理解c++的后续内容,以及实现对象的相关功能有很大帮助。

2024-09-15 22:44:58 1563 27

原创 【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)

所谓默认成员函数,就是在类当中我们没有显示实现,但是编译器自动生成的成员函数称之为默认成员函数。在c++11之前,默认成员函数一共有六个:接下来我们会根据它们的特点,使用规则以及自实现方面逐一讲解。今天我们学习了四个类的默认成员函数构造函数、析构函数、拷贝构造函数和赋值重载,它们能够确保资源的正确管理和对象状态的正确维护。之后博主会和大家分享其余的两个默认成员函数,并实现日期类。

2024-09-03 09:04:44 1846 36

原创 【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)

快速排序是一种高效且常用的排序算法,但是传统的快排并没有对与基准值相同的数据进行明确划分,造成运行效率的降低。左边是比基准值小的数据;中间是与基准值相同的数据;右边是比基准值大的数据。这样,与基准值相同的数据就不需要再次划分,提高了整体的运行效率。

2024-08-29 19:31:29 1326 14

原创 【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)

类的本质是一种自定义类型,是定义对象模板的蓝图或者结构。它制定了对象可以包含的数据以及该对象可以执行的操作。在某种程度上,c++中的类可以认为是c语言结构体的升级版,不仅可以在其中定义成员变量,也可以定义成员函数,用于对成员变量进行访问或操作。

2024-08-28 22:30:59 1316 26

空空如也

空空如也

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

TA关注的人

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