自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】自定义Shell

本文详细讲解了自定义Shell的实现原理和步骤。首先介绍了Shell的工作原理,包括获取命令行、解析命令、创建子进程、执行命令和等待子进程退出等核心流程。然后具体实现了输出命令行提示符、获取用户输入、命令行解析以及创建子进程执行命令等功能模块。文章还探讨了如何扩展Shell功能,如添加环境变量表支持等。通过时间轴和代码示例,清晰地展示了Shell从接收用户指令到执行命令的完整过程,为读者理解Shell内部机制和实现自定义Shell提供了实用指导。

2025-11-24 17:51:28 459

原创 【Linux】进程创建、进程终止、进程等待和进程程序替换

本文详细介绍了Linux进程控制的核心内容,包括进程创建、终止、等待和程序替换。在进程创建部分,重点讲解了fork函数的工作原理、写时拷贝机制及常见用法;进程终止部分对比分析了exit()和_exit()的区别,强调exit会执行缓冲区刷新等清理工作,而_exit直接终止进程。此外还介绍了进程退出码的含义,帮助理解程序执行状态。文章通过代码示例和图表辅助说明,为Linux系统编程中的进程管理提供了实用指导。

2025-11-23 22:14:20 479

原创 【Linux】命令行参数、环境变量和进程地址空间

本文介绍了命令行参数和环境变量的相关内容。命令行参数通过main函数的argc和argv传递,bash将输入内容拆分成参数表。环境变量用于指定系统运行参数,如PATH确定命令搜索路径。常见环境变量包括PATH、HOME、SHELL等,可通过env、echo或代码获取。环境变量具有全局特性,可通过export修改和unset清除。理解环境变量有助于掌握程序执行环境和系统配置机制。 关键词:命令行参数、环境变量、PATH、export、bash

2025-11-19 15:46:42 950

原创 【Linux】进程状态、进程优先级、进程切换和调度

本文详细介绍了计算机系统中的进程管理相关内容。首先讲解了冯诺依曼体系结构,指出CPU只能访问内存这一关键特性。接着阐述了操作系统的核心作用,即管理硬件资源和为程序提供执行环境。重点介绍了进程的概念,包括PCB(进程控制块)、task_struct数据结构以及如何组织进程。通过实例演示了查看进程信息、获取进程标识符pid/ppid的方法,并详细讲解了fork系统调用的使用,包括创建子进程和父子进程分流处理。文章通过代码示例和命令行操作展示了进程管理的核心概念与实践方法,为理解操作系统进程管理机制提供了实用指导

2025-11-16 16:17:39 914

原创 【Linux】版本控制器Git和调试器—gdb/cgdb的使用

本文介绍了版本控制器Git和调试器gdb/cgdb的使用。主要内容包括:Git的安装与基本配置,在Gitee上创建仓库并克隆到本地,Git核心操作三板斧(add、commit、push)的使用方法,以及其他常用命令如status、log、pull等。文章还简要说明了Git的发展历史和设计目标,以及.git文件夹和.gitignore文件的作用,帮助读者快速掌握Git的基本使用方法。

2025-11-02 13:19:34 655

原创 【Linux】自动化构建工具make和Makefile和第一个系统程序—进度条

本文介绍了Linux中的自动化构建工具make和Makefile的使用方法。make是一个任务编排器,通过读取Makefile中的规则来执行编译等任务。Makefile包含目标与依赖关系,并定义依赖方法来生成目标文件。文章详细解析了依赖关系和依赖方法的协同工作原理,通过文件时间戳判断是否需要重新生成目标。同时介绍了伪目标(.PHONY)的作用,常用于清理工作,可以重复执行。还通过stat指令验证了文件修改时间对make决策的影响。

2025-10-31 23:43:29 989 1

原创 【Linux】编辑器vim的使用和理解gcc编译器

本文介绍了Linux下的软件包管理器和Vim编辑器的使用。首先讲解了yum和apt两种常见的软件包管理器,以及Linux软件生态。随后重点介绍了Vim编辑器的基本概念、安装方法和五种常见工作模式(命令模式、插入模式、底行模式、可视模式、替换模式),详细说明了各模式下的常用命令集,包括光标移动、文本编辑、查找替换等操作。最后还介绍了Vim的便利功能,如同时打开多个文件。文章旨在帮助读者掌握Linux环境下软件安装和文本编辑的基本技能。

2025-10-28 14:58:16 1054

原创 【Linux】理解其中的权限

本文介绍了Linux系统中的权限管理,包括用户分类、文件权限设置方法及相关命令。Linux有超级用户(root)和普通用户之分,普通用户权限受限。文件权限分为读(r)、写(w)、执行(x)三种,可通过chmod命令修改权限,chown修改文件拥有者,chgrp修改所属组。umask命令用于设置默认权限掩码,影响新建文件和目录的初始权限。文章还详细讲解了如何查看和修改文件权限,以及不同用户类型对文件的操作限制。

2025-10-25 23:38:23 1253

原创 【Linux】基础指令

本文介绍了Linux操作系统的基础知识,包括其特点、XShell远程登录方法以及基本指令使用。Linux是一个开源、稳定、安全的操作系统内核,支持多用户多任务和跨平台运行。文章详细讲解了常用指令如ls(查看目录内容)、pwd(显示当前路径)、cd(切换目录)、touch(创建文件)、mkdir(创建目录)、rm(删除文件/目录)等,并配有操作示例。此外,还介绍了绝对路径与相对路径概念,以及man指令查询帮助文档的方法。这些内容为Linux初学者提供了入门指导,帮助用户掌握基本操作技能。

2025-10-22 15:22:25 760

原创 【C++】C++智能指针(详解)

本文介绍了C++智能指针的设计思路和使用方法。通过分析内存泄漏场景,引出RAII(资源获取即初始化)思想,即利用对象生命周期管理动态资源。文章详细讲解了智能指针类的设计原理,包括资源管理方式和运算符重载。针对拷贝问题,对比了不同智能指针的解决方案:auto_ptr采用所有权转移(已弃用),unique_ptr禁止拷贝,shared_ptr通过引用计数共享资源,weak_ptr解决循环引用问题。最后,文章总结了智能指针的选择策略,推荐优先使用unique_ptr和shared_ptr,避免使用auto_ptr

2025-10-14 14:32:14 392

原创 【C++】C++11新特性(详解)

C++11新特性总结 C++11是C++标准的一次重大更新,主要特性包括: 列表初始化:统一初始化方式,支持一切对象用{}初始化,可省略=号,简化了容器初始化操作。 std::initializer_list:提供容器支持任意多个值初始化的机制,底层实现为数组拷贝。 右值引用:引入Type&&语法,区分左值/右值引用: 左值引用不能直接引用右值,但const左值引用可以 右值引用不能直接引用左值,需用move转换 移动语义:通过右值引用实现资源转移,避免深拷贝,提高效率。

2025-10-14 14:31:27 987

原创 【C++】哈希和哈希封装unordered_map、unordered_set

本文介绍了哈希表的基本概念、实现方法及其在封装unordered_map和unordered_set中的应用。主要内容包括: 哈希概念:通过哈希函数建立关键字与存储位置的映射关系,实现快速查找。 哈希冲突处理:介绍了除法散列法、乘法散列法等哈希函数,以及开放定址法(线性探测、二次探测)和链地址法两种冲突解决方法。 哈希表实现:详细讲解了基于开放定址法的哈希表数据结构设计,包括状态枚举、扩容策略等关键实现细节。 负载因子:解释了负载因子对哈希表性能的影响,建议控制在0.7左右。

2025-10-06 16:19:17 1081

原创 【C++】使用红黑树封装map和set

本文将介绍红黑树如何封装实现map和set。通过分析STL源码框架,发现红黑树通过泛型设计,由第二个模板参数Value决定存储的数据类型,实现set和map的复用。关键在于引入KeyOfT仿函数来获取T中的Key值进行比较。文章详细讲解了insert操作的实现过程,包括节点插入、颜色调整等步骤。通过这种设计,红黑树可以同时支持key搜索场景(set)和key/value搜索场景(map)。

2025-10-03 19:30:28 583

原创 【C++】红黑树的实现

本文介绍了红黑树的概念、规则及实现方法。红黑树是一种接近平衡的二叉搜索树,通过颜色约束(根节点为黑色、无连续红节点、路径黑节点数相同)确保最长路径不超过最短路径的2倍,时间复杂度为O(logN)。其插入操作分为三种情况处理:变色(当叔节点为红)、单旋+变色(当叔节点为黑且LL/RR型)和双旋+变色(当叔节点为黑且LR/RL型)。红黑树相比AVL树旋转次数更少,效率相当,适合需要高效查找的场景。

2025-10-01 01:20:39 692

原创 【C++】AVL树(平衡二叉搜索树)的实现

本文介绍了AVL树的基本概念和实现方法。AVL树是一种自平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡。文章详细讲解了AVL树节点的定义、插入操作的过程以及平衡因子的更新规则。重点分析了四种旋转情况(左单旋、右单旋、左右双旋、右左双旋)来调整失衡的AVL树,保持其平衡性。AVL树通过这种平衡机制,将搜索时间复杂度控制在O(logN)级别,相比普通二叉搜索树有了本质提升。文中还提供了部分C++实现代码,展示了AVL树的核心操作逻辑。

2025-09-26 17:47:07 931

原创 【C++】map和set的使用

摘要:本文介绍了C++中关联式容器set和map的使用,重点讲解了set的构造、迭代器、增删查等操作。set底层基于红黑树实现,具有去重和自动排序特性,增删查时间复杂度为O(logN)。通过代码示例演示了insert、find、erase等接口的使用,并对比了算法库的线性查找与set自身的高效查找。此外,还展示了利用lower_bound和upper_bound实现区间操作的方法。关联式容器与序列式容器的核心区别在于其非线性结构和基于关键字的访问方式。

2025-09-20 16:57:25 940

原创 【C++】二叉搜索树

本文介绍了二叉搜索树(BST)的基本概念和操作。二叉搜索树是一种有序二叉树,左子树值小于等于根节点,右子树值大于等于根节点。文章分析了BST的性能,最优情况下时间复杂度为O(logN),最差情况下退化为O(N)。详细讲解了BST的三大核心操作:插入(根据值大小定位插入位置)、查找(沿树结构比较值)、删除(分四种情况处理,包括替换法删除)。最后给出了BST的C++实现代码,包含节点结构、插入、查找和删除等关键功能。文章指出BST的局限性,为后续讲解平衡二叉搜索树(AVL树和红黑树)做铺垫。

2025-09-20 16:54:13 592

原创 【C++】多态详解

本文介绍了C++多态的概念与实现。多态分为编译时多态(函数重载、模板)和运行时多态(虚函数重写)。实现运行时多态需要满足两个条件:1)通过基类指针或引用调用虚函数;2)派生类必须重写基类虚函数(函数名、参数列表、返回值相同)。文章详细讲解了虚函数重写、协变、析构函数重写等核心概念,并通过买票、动物叫等示例代码演示多态的应用。特别强调了基类析构函数必须声明为虚函数以避免内存泄漏问题。多态是面向对象编程的重要特性,能够实现"同一接口,不同行为"的效果。

2025-09-14 01:16:40 775 1

原创 【C++】继承详解

本文介绍了C++面向对象编程中的继承机制,重点讲解了继承的概念、定义方式以及基类和派生类之间的转换规则。继承是代码复用的重要手段,允许在保持原有类特性的基础上进行扩展。文章通过学生和教师的例子展示了继承的实际应用,说明了如何通过继承避免代码冗余。同时详细分析了不同继承方式下基类成员在派生类中的访问权限变化,强调public继承是最常用的方式。最后还讨论了基类与派生类对象间的赋值转换规则,包括"切片"特性以及类型安全转换的注意事项。

2025-09-11 21:44:24 1176 1

原创 【C语言】编译和链接

本文介绍了C语言程序的翻译环境和运行环境。翻译环境包含编译和链接两大步骤,其中编译又分为预处理、编译和汇编三个阶段。预处理阶段处理宏定义、条件编译等指令;编译阶段进行词法分析、语法分析和语义分析;汇编阶段将代码转换为机器指令;链接阶段处理多文件间的函数调用和变量引用。运行环境则包括程序加载、执行、内存管理和终止等过程。通过分析test.c和add.c的编译链接过程,详细阐述了符号决议和重定位的原理。

2025-07-30 00:34:58 992

原创 【C语言】文件操作

本文详细介绍了C语言中的文件操作,主要包括文件的概念与分类、二进制与文本文件的区别、文件指针的使用以及文件的打开与关闭方法。文章还讲解了顺序读写函数的使用,帮助读者理解如何通过文件实现数据的持久化存储。通过学习这些内容,读者可以掌握C语言中文件处理的基本方法,为程序开发提供重要支持。

2025-07-27 17:56:13 1156 1

原创 【C语言】数据在内存中的存储

本文探讨了数据在内存中的存储方式。整数以二进制补码形式存储,正数原码、反码、补码相同,负数则需转换。大小端字节序决定了多字节数据的存储顺序,可通过编程验证当前系统的字节序模式。浮点数存储遵循IEEE 754标准,由符号位、指数和尾数三部分组成,不同位模式对应特殊取值情况。通过一个整型与浮点型转换的示例,展示了浮点数存储规则的实际应用,解释了意料之外的输出结果。理解这些存储原理对正确处理数据类型转换和内存操作至关重要。

2025-07-21 00:05:09 926 2

原创 【C语言】扫雷游戏

本文详细介绍了扫雷游戏的设计与实现。首先,游戏通过控制台实现,支持99的棋盘,默认随机布置10个雷。玩家可以排查雷,若踩雷则游戏结束,若成功排查所有非雷区域则获胜。游戏使用两个1111的数组分别存储雷的位置信息和排查结果,避免数据混淆。文件结构分为test.c、game.c和game.h,分别用于测试逻辑、函数实现和声明。改进方案包括使用递归展开无雷区域,并将无雷区域显示为空格以提升视觉效果。代码部分展示了棋盘的初始化、雷的布置、排查雷的逻辑,以及递归展开无雷区域的实现。

2025-05-17 12:35:41 1102 2

原创 【C++】模板进阶

基于模板初阶的内容,本章讲解模板进阶的内容,模板进阶主要讲解:非类型模板参数,模板的特化,模板的分离编译。模板的特化又分为函数模板特化和类模板特化,类模板特化又分为全特化和偏特化,最后再对模板进行总结。

2025-05-03 16:42:39 1139 6

原创 【C++】stack、queue和priority_queue的模拟实现

之前已经模拟实现了vector和list,在这篇博文中,我们要对stack,queue和priority_queue进行模拟实现。适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。在 C++ 标准库中,容器适配器(Container Adaptors)是一种特殊的容器,它们并非独立的容器类型,而是对现有容器类型进行了封装和适配,以提供特定的接口和行为。

2025-04-26 15:45:14 833 4

原创 【C++】list的模拟实现

在之前string和vector的模拟实现中,我们了解到了它们的底层是怎么实现的,在本篇博客我会为大家介绍list的模拟实现(包括迭代器,增删查改),list的模拟实现和string,vector不同,因为list是由一个一个节点连接而成的,所以物理空间是不连续的,迭代器的底层实现也有差异。

2025-04-17 18:14:30 1173 5

原创 【C++】vector的模拟实现

本篇博客讲的是vector的模拟实现,因为上一篇博客已经模拟了string的实现,所以在模拟vector的实现中会比较熟悉,模拟vector的实现是为了我们更好地理解和掌握vector,接下来我们会实现vector一些重要的接口。

2025-04-05 21:10:31 956 4

原创 【C++】String类的模拟实现

本文章主要内容是模拟string类的实现,有每个函数的实现细节和代码详解,最后附上源码

2025-03-26 21:51:14 991 6

原创 【C++】模板初阶

在这篇博文中,我会详细介绍C++模板初阶的内容。其中C++模板包括函数模板和类模板,会通过文字和代码详细概述函数模板和类模板的定义和具体的用法。

2025-02-27 23:45:23 967 10

原创 C++内存管理

在这篇博文中,我会详细介绍C/C++的内存管理并对比它们的内存管理方式。malloc:只负责分配内存,不负责初始化。calloc:负责分配内存并初始化为 0。realloc:可以调整已分配内存块的大小,并且可以处理内存块的移动(如果新大小与原大小不同,可能会移动内存块到新的地址)。对于自定义类型,malloc/free只是简单地开辟空间和释放空间,而new/delete除了会开辟空间和释放空间,还会调用构造函数进行初始化和调用析构函数来清理内存(避免内存泄漏)。

2024-12-05 17:04:47 1000 8

原创 PAT甲级 1056 Mice and Rice(25)

PAT甲级真题1056 Mice and Rice详解和AC代码

2024-11-24 22:18:23 1196 8

原创 PAT甲级 1080 Graduate Admission(30)

PAT甲级真题1080 Graduate Admission 详解和AC代码

2024-11-21 19:33:30 970 10

原创 PAT甲级 1076 Forwards on Weibo(30)

PAT甲级真题1076 Forwards on Weibo详解附AC代码

2024-11-12 18:02:04 1150 10

原创 PAT甲级 1097 Deduplication on a Linked List(25)

PAT甲级1097详解附AC代码

2024-11-09 19:34:05 980 6

原创 C++类和对象 (下)

在学习C++类和对象上和中的基础上,我们继续来学习C++类和对象剩下的内容,大致包括构造函数的初始化列表,隐式类型转换,static成员,友元,内部类,匿名对象,对象拷贝时编译器的优化。

2024-11-09 17:22:16 1539 8

原创 C++类和对象 (中)

在上节的类和对象(上)的学习中,我们了解类里面有成员变量和成员函数,还有结构体的内存对齐规则和this指针。那么在这一节,我们来了解类的默认成员函数,赋值运算符重载,取地址运算符重载。

2024-10-27 13:56:04 1252 8

原创 C++类和对象(上)

面向对象在面向对象编程(Object-Oriented Programming,简称OOP)中,对象通过类(Class)来定义。类是一种抽象的数据类型,它描述了具有相同属性和方法的对象的集合。一个类可以看作是一个模板,用于创建具有特定属性和行为的对象实例。class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。

2024-10-13 20:00:30 1394 12

原创 常用快捷键整理

常用快捷键整理(VS,windows)

2024-10-01 14:41:45 856 11

原创 C++入门基础 (超详解)

C++是在C语言的基础上发展而来的一种面向对象编程语言,它在保留C语言强大功能的同时,引入了许多新的特性。比如面向对象编程(OOP):类, 封装, 继承, 多态四大件,引用(Reference)模板(Template)命名空间(Namespace)异常处理(Exception Handling)标准模板库(STL)C++在很多领域有着广泛的应用,比如游戏开发,操作系统开发,嵌入式系统开发, 数据库管理系统,图形图像处理和网络通信(QT),虚拟现实(VR)和增强现实(AR),航空航天与军工领域等等。

2024-10-01 14:31:15 11377 15

原创 数据结构:内部排序

讲解排序的概念和分类,排序的稳定性等概念,再详细介绍了八大排序的实现过程和源代码,最后对比了八大排序的排序性能和算法复杂度以及稳定性

2024-09-21 22:51:29 1895 10

includes俄罗斯方块.docx

includes俄罗斯方块.docx

2023-12-22

空空如也

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

TA关注的人

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