自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux系列】掌控 Linux 的脉搏:深入理解进程控制

文章摘要:本文介绍了进程创建、终止及等待的相关概念。进程创建主要通过fork函数实现。进程终止有三种场景:代码正确执行完毕、代码执行完毕但结果错误、代码异常终止,可通过exit、_exit或return退出,其中exit会刷新缓冲区而_exit不会。进程等待的必要性在于避免子进程成为僵尸进程导致内存泄漏,父进程需要通过等待机制获取子进程状态。

2025-10-18 14:03:21 2266 140

原创 【Linux系列】解码 Linux 内存地图:从虚拟到物理的寻宝之旅

程序地址空间与虚拟内存管理 本文深入探讨了程序地址空间的本质,指出传统C语言中的内存布局图实际是进程的虚拟地址空间。通过父子进程共享变量地址但值不同的实验,揭示了虚拟地址与物理内存的区别。文章详细解释了页表机制如何实现虚拟地址到物理地址的映射,以及写时复制技术如何保证进程独立性。最后,通过生动比喻说明了操作系统如何像"富翁分饼"一样管理虚拟内存空间,并介绍了mm_struct数据结构对虚拟地址空间的区域划分管理。这些概念对理解现代操作系统内存管理机制具有重要意义。

2025-10-15 10:05:38 4270 190

原创 【Linux系列】Linux 环境变量详解与实战:让你的命令行如虎添翼

本文介绍了环境变量和命令行参数的基本概念。命令行参数通过main(int argc, char* argv[])传递,argv存储以空格分隔的字符串,argc记录参数数量,支持程序通过选项实现不同功能。环境变量(如PATH、HOME等)是操作系统的全局参数,帮助系统定位可执行文件(如ls无需./)或记录用户信息(家目录、登录用户等)。通过修改PATH可将自定义程序设为系统命令,但需注意潜在风险。文章还列举了常见环境变量(USER、HISTSIZE等)的作用,展示了环境变量在系统运行中的关键性。

2025-10-11 17:12:20 2214 153

原创 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程优先级切换调度

本文介绍了进程优先级的基本概念及其在操作系统中的重要性。CPU资源有限,进程通过优先级决定执行顺序,优先级数值越小则越高。Linux系统中,优先级由PRI(默认80)和NI(修正值)共同决定,范围在60到99之间。通过top命令可修改NI值间接调整优先级,但需注意避免破坏系统调度平衡。文章还探讨了进程切换机制,解释了时间片分配如何防止单个进程长期占用CPU,并简述了寄存器在进程运行时的作用。最后补充了竞争性、独立性、并行与并发等关键概念,帮助理解多进程环境下的资源管理。

2025-10-08 18:55:02 6953 164

原创 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程状态

本文介绍了Linux进程的各种状态及其本质。根据Linux内核源代码,进程状态分为运行(R)、睡眠(S)、磁盘休眠(D)、停止(T)、追踪停止(t)、死亡(X)和僵尸(Z)七种。进程状态本质是task_struct结构体中的一个整型变量,通过宏定义实现状态转换。文章详细解释了运行、阻塞和挂起三种状态:运行状态表示进程在CPU上执行或准备执行;阻塞状态是进程等待设备资源就绪,如键盘输入;挂起状态则是内存不足时,操作系统将阻塞进程的代码数据换出到磁盘。通过调度队列和设备队列的图示,阐明了进程状态变化本质是进程控

2025-10-05 18:32:59 2523 138

原创 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念

本文介绍了进程的基本概念、PCB(进程控制块)的作用以及Linux中的task_struct数据结构。主要内容包括:进程是程序的执行实例,由内核数据结构(PCB)和代码数据组成;Linux使用task_struct来管理进程属性;通过/proc系统文件夹和ps命令可以查看进程信息;系统调用getpid可获取进程标识符。文章还演示了如何查看和终止进程,帮助读者理解操作系统如何组织和管理进程资源。

2025-10-03 09:58:28 2131 136

原创 【算法详解】理解KMP,真的那么难吗?—— 一篇讲透它的核心思想

KMP算法是一种高效的字符串匹配算法,其核心思想是利用前缀函数(π数组)来避免不必要的重复匹配。文章首先介绍了字符串相关概念,包括真前缀、真后缀、最长真公共前后缀(border)等。然后详细讲解了前缀函数的计算原理和实现方法,通过动态规划思想推导状态转移方程,时间复杂度为O(n)。最后,文章展示了如何利用前缀函数解决字符串匹配问题,通过预处理模式串构建π数组,在主串中快速定位匹配位置。相比暴力匹配的O(n×m)复杂度,KMP算法优化到O(n+m)的线性时间复杂度,显著提高了匹配效率。

2025-10-01 22:56:04 2431 112

原创 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 理解操作系统

本文介绍了计算机系统的核心概念,包括冯诺依曼体系结构和操作系统的基本原理。冯诺依曼体系是计算机的物理骨架,由输入单元、中央处理器、存储器和输出单元组成。其核心特点是数据通过内存流动,CPU只能与内存交互,外设也需通过内存进行数据传输。该体系通过引入内存平衡外设与CPU的速度差异,提升整体效率,是计算机性价比优化的关键。 操作系统是管理软硬件的核心软件,分为内核和外壳程序。其设计目的是为上层应用程序提供良好的执行环境,并通过系统调用实现软硬件交互。用户程序无法直接访问硬件,必须通过操作系统提供的接口完成操作。

2025-09-28 20:09:12 2892 123

原创 【Linux系列】让 Vim “跑”起来:实现一个会动的进度条

本文介绍了如何利用Vim、GCC/G++和Makefile等基本开发工具实现一个简单的进度条程序。首先讲解了回车(\r)与换行(\n)的区别,指出"回车+换行"才是真正的换行操作。接着通过示例代码演示了行缓冲区的概念,说明如何用fflush()强制刷新缓冲区。随后实现了一个倒计时程序,利用\r实现数字原地刷新效果。最后基于这些知识,展示了如何构建一个完整的进度条项目,包括创建源文件、头文件和Makefile自动化编译。文章通过循序渐进的方式,帮助读者掌握控制台输出刷新和缓冲区的关键概念。

2025-09-27 18:14:57 4772 27

原创 【Linux系列】打造你的数字车间:Linux 基础开发工具入门与精要 — 自动化构建:make/Makefile

本文介绍了Linux环境下使用make和Makefile实现自动化编译的方法。Makefile通过定义依赖关系和依赖方法(如gcc -o code code.c),只需执行make命令即可自动编译代码,提高开发效率。文章还讲解了项目清理(make clean)和伪目标(.PHHONY)的作用,后者能强制重复执行命令(如持续编译)。此外,通过stat命令分析文件时间戳,解释了Makefile如何检测文件变更以决定是否重新编译。内容涵盖基础语法与实用技巧,适合初学者快速掌握自动化构建工具。

2025-09-27 11:22:48 4676 18

原创 【Linux系列】打造你的数字车间:Linux 基础开发工具入门与精要 — gcc/g++ 编译

本文介绍了C语言程序的编译流程,包括预处理、编译、汇编和链接四个步骤。详细讲解了gcc/g++编译器的使用方法,包括直接生成可执行程序的两种方式,以及如何分步完成各个编译阶段。文章还对比了静态库和动态库的区别,说明库文件在编程中的重要作用。最后简要提及g++与gcc的相似用法,帮助读者掌握C/C++程序从源代码到可执行文件的完整编译过程。

2025-09-26 19:18:09 5965 97

原创 【Linux系列】打造你的数字车间:Linux 基础开发工具入门与精要 — vim 使用

本文介绍了Linux系统中常用的开发工具,包括软件包管理器和Vim编辑器。主要内容有: Linux软件包管理器 介绍了yum(CentOS)和apt(Ubuntu)两种包管理器 对比了源码安装、软件包安装和包管理器安装的优缺点 演示了使用yum/apt安装、删除软件包的操作方法 Vim编辑器 说明了Vim是Linux自带的重要编辑器 讲解了Vim的基本使用方法 演示了使用Vim编写简单C程序并编译运行的过程 文章重点强调了包管理器自动解决依赖关系的优势,以及Vim编辑器对Linux开发者的重要性。

2025-09-25 15:13:21 1207 20

原创 【Linux系列】Linux 世界的通行证与守卫者:一文读懂权限的奥秘

本文介绍了Linux系统中的权限管理机制。首先解释了shell作为命令行解释器的作用,它是用户与内核沟通的桥梁。然后详细讲解了Linux中的两种用户(超级用户root和普通用户)及其切换方法(su命令)。接着重点阐述了权限的概念,指出权限由角色(拥有者、所属组、其他用户)和目标属性(读、写、执行)共同决定。文章还介绍了sudo命令的提权功能,并强调权限管理的核心目的是控制用户行为以防止错误发生。通过现实生活中的类比,帮助读者理解Linux权限系统的重要性。

2025-09-23 17:32:38 10624 112

原创 【C++进阶】智能指针的使用及其原理

本文介绍了C++智能指针的使用场景、设计思路及标准库实现。主要内容包括: 通过异常处理案例展示内存泄漏问题,说明智能指针的必要性; 提出RAII(资源获取即初始化)设计思想,利用对象生命周期管理资源; 设计简易智能指针类,实现资源自动释放和指针行为模拟; 分析智能指针拷贝问题,对比标准库的auto_ptr、unique_ptr等解决方案; 重点指出auto_ptr存在管理权转移缺陷,建议避免使用。 文章通过代码示例和图示,系统讲解了智能指针如何解决资源泄漏问题,并比较了不同智能指针的实现特点。

2025-09-22 11:41:01 7249 108

原创 【C++进阶】异常的概念及使用

本文介绍了C++中的异常处理机制,主要包括异常的概念、抛出和捕获异常的方法、栈展开过程、异常匹配规则以及异常重新抛出等内容。异常处理允许程序在运行时检测和处理错误,将问题检测与解决过程分离,提高程序的健壮性。文章通过代码示例演示了如何抛出异常、捕获异常以及处理不同类型的异常情况,并讲解了异常匹配的规则和栈展开的原理。最后还介绍了异常重新抛出的应用场景,如网络通信中的错误重试机制。异常处理是构建稳定可靠软件的重要技术之一。

2025-09-21 14:41:57 1071 33

原创 【C++进阶】C++11 的新特性 | lambda | 包装器

本文介绍了C++11中的lambda表达式和包装器。lambda表达式是一种匿名函数对象,可以定义在函数内部,通过捕捉列表获取上下文变量,支持显式/隐式捕捉和混合捕捉方式。包装器std::function可以统一存储函数指针、仿函数和lambda表达式。文章详细讲解了lambda的语法规则、捕捉列表使用方式,并通过多个代码示例演示了lambda的实际应用,最后简要介绍了包装器的作用。这些特性使C++的函数式编程更加灵活高效。

2025-09-20 21:08:03 1349 26

原创 【C++进阶】C++11的新特性 | 列表初始化 | 可变模板参数 | 新的类功能

本文介绍了C++11标准中的新特性,重点讲解了列表初始化的相关内容。 在列表初始化方面,C++11扩展了C++98中{}初始化的使用范围,使其可以用于一切对象的初始化,包括内置类型和自定义类型。文章通过代码示例展示了如何使用{}初始化各种类型对象,并解释了背后的优化原理。 特别介绍了std::initializer_list类,这是STL容器支持列表初始化的关键。通过initializer_list,容器可以方便地接受任意多个值的初始化列表。文章还展示了容器如何利用initializer_list实现初始化

2025-09-20 12:56:04 1345 91

原创 【C++进阶】C++11的新特性—右值引用和移动语义

本文介绍了C++中左值和右值的概念及区别,重点讲解了左值引用和右值引用的语法特性与应用场景。文章首先通过示例代码区分了左值(可寻址)和右值(不可寻址),然后详细分析了引用类型对参数匹配的影响。特别强调了右值引用的设计意义:通过move语义延长临时对象生命周期并支持修改,同时解释了右值引用变量在表达式中具有左值属性的特殊设计。最后指出引用折叠等更深入的内容将在后续探讨。全文通过代码示例和图示帮助理解这些关键概念及其底层实现原理。

2025-09-18 16:39:43 1219 111

原创 【STL库】哈希封装 unordered_map/unordered_set

本文介绍了基于哈希表封装实现unordered_map和unordered_set容器的过程。首先分析了源码结构,指出其与map/set实现的相似性。然后详细讲解了模拟实现的步骤,包括:1) 复用哈希表框架并支持insert操作;2) 实现迭代器功能,包括iterator和const_iterator;3) 解决key不可修改的问题;4) 实现operator[]操作符。重点剖析了迭代器实现思路,指出其与list迭代器类似,都是通过封装结点指针并重载运算符实现的,但哈希表迭代器是单向迭代器。

2025-09-17 14:52:34 1240 28

原创 【STL库】哈希表的原理 | 哈希表模拟实现

本文系统介绍了哈希表的核心概念与实现原理。首先阐述了哈希(散列)的本质是通过哈希函数建立关键字与存储位置的映射关系,实现O(1)时间复杂度的快速查找。重点分析了直接定址法的优缺点,指出其在数据分散时存在严重的内存浪费问题,并引出哈希冲突这一核心挑战。 文章详细探讨了三种经典哈希函数的设计:除法散列法强调选择质数作为表大小,乘法散列法利用黄金分割点优化分布,全域散列法则通过随机化增强安全性。针对不可避免的哈希冲突问题,特别介绍了负载因子的概念及其对性能的影响,并指出非整型关键字需先转换为整数才能进行哈希计算。

2025-09-16 19:55:56 1826 99

原创 【STL库】unordered_map/unordered_set 类学习

本文介绍了C++中unordered_set容器的使用及其与set的区别。unordered_set底层基于哈希表实现,查找效率为O(1),但迭代器遍历无序且不支持反向遍历。文章详细讲解了其构造函数、迭代器用法、增删查操作,并通过代码示例展示了如何插入元素(单个值、迭代器区间、列表)、删除元素以及查找元素。与set相比,unordered_set在效率上有优势,但在有序性方面有所欠缺。该容器适用于需要快速查找但对元素顺序无要求的场景。

2025-09-15 17:15:03 998 79

原创 【算法详解】:编程中的“无限”可能,驾驭超大数的艺术—高精度算法

高精度算法解析 本文详细介绍了高精度算法的原理和实现方法,主要包含加法、减法和乘法三种运算。当数据超出常规数据类型范围时,高精度算法通过字符串存储和数组模拟运算来解决大数计算问题。 算法核心: 使用字符串读入大数,并逆序存入数组 模拟竖式计算过程,逐位处理运算和进位 具体实现: 加法:从末位开始相加,处理进位和余数 减法:比较数的大小后相减,处理借位和前导零 乘法:采用无进位相乘后统一处理进位的方式 适用场景: 适用于科研计算、密码学等领域中需要处理超大数值的情况。

2025-09-14 23:18:35 1271 29

原创 【STL库】map/set 的封装原理

本文介绍了如何利用红黑树封装实现STL中的map和set容器。通过源码分析,作者发现STL开发者采用了巧妙的泛型设计,使红黑树能够同时支持key和key/value两种搜索场景。具体实现中,map传入pair<lt;const key, T>;作为模板参数,set则直接传入key。文章详细讲解了红黑树框架的构建,包括结点结构、插入操作以及迭代器实现的关键技术点。特别说明了插入操作中比较键值时的仿函数处理方式,以及如何通过模板参数控制红黑树存储的数据类型。最后简要提及了迭代器的实现思路。

2025-09-14 19:38:34 1249 72

原创 【算法详解】:从 模拟 开始打开算法密匙

算法入门:模拟算法解析与实践 本文介绍了基础算法中的模拟算法,通过两个典型例题展示了其应用场景和解题思路。 多项式输出题: 根据题目要求逐步处理系数和符号 通过分步输出控制格式,处理特殊情况(如系数为1、0次项等) 时间复杂度O(n),空间复杂度O(1) 蛇形方阵题: 使用方向向量(右、下、左、上)控制填数路径 通过边界检测实现自动转向 构建n×n矩阵,时间复杂度O(n²),空间复杂度O(n²) 模拟算法的核心是题目要求什么就实现什么,需要仔细分析题目条件,将自然语言描述准确转化为代码逻辑。

2025-09-13 22:16:22 1057 22

原创 【SLT库】红黑树的原理学习 | 模拟实现

红黑树是一种自平衡二叉搜索树,通过颜色约束和四条规则确保近似平衡:1.根结点为黑;2.无连续红结点;3.任意路径黑结点数相同。这些规则保证最长路径不超过最短路径的2倍,使增删查改时间复杂度稳定在O(logN)。相比AVL树,红黑树旋转次数更少,被广泛用于STL的map/set实现。 红黑树插入时,新增结点默认红色。若父结点为黑则直接插入;若父结点为红则需处理冲突:当叔结点为红时进行颜色翻转;否则通过旋转调整结构。通过变色和旋转的组合操作,红黑树在维持平衡的同时减少了结构调整次数,展现出优异的综合性能。

2025-09-13 17:12:31 1218 60

原创 【Linux系列】摆脱 Linux 小白的第一步——Linux的基本指令

本文介绍了Linux系统的基本指令,包括ls、pwd、cd、touch、mkdir、rmdir和rm等。ls用于列出目录内容,支持多种选项查看文件详细信息;pwd显示当前工作目录;cd用于切换目录,支持绝对路径和相对路径;touch创建新文件或修改文件时间属性;mkdir创建目录,支持递归创建;rmdir删除空目录,rm可删除文件及目录。这些指令是Linux操作的基础,掌握它们对高效使用Linux系统至关重要。

2025-09-12 20:53:25 1509 53

原创 STL库——AVL树

本文介绍了AVL树(自平衡二叉查找树)的基本概念和实现方法。AVL树通过控制左右子树高度差的绝对值不超过1来保持平衡,确保增删查改操作的时间复杂度为O(logN)。文章详细讲解了AVL树的结构、插入操作(包括平衡因子更新)、四种旋转方式(右单旋、左单旋、左右双旋、右左双旋)的实现原理,并提供了相应的代码实现。此外还介绍了AVL树的查找、平衡检测等功能。文章强调理解旋转操作是掌握AVL树的关键,建议通过画图加深理解。

2025-09-11 14:21:48 1112 68

原创 STL库——map/set(类函数学习)

本文系统介绍了C++ STL中的关联式容器set和map系列。主要内容包括:1. 关联式容器与序列式容器的区别,强调关联式容器的非线性结构和键值关联特性;2. set系列的使用方法,包括构造、增删查操作,以及multiset与set的差异;3. map系列的使用方法,重点讲解pair类型、构造、增删查改操作,特别是operator[]的多功能特性;4. multimap与map的主要区别。文章指出这些容器底层基于红黑树实现,时间复杂度为O(logN),并建议结合二叉搜索树知识进行理解。

2025-09-09 21:54:52 1380 52

原创 STL库——二叉搜索树

本文介绍了二叉搜索树(BST)的概念、操作实现及性能分析。二叉搜索树是一种特殊的二叉树,其中左子树节点值小于等于根节点,右子树节点值大于等于根节点。文章详细讲解了BST的插入、查找、删除等基本操作,并分析了其时间复杂度在最优(O(logN))和最差(O(N))情况下的性能差异。此外,还介绍了key和key/value两种使用场景,以及如何通过递归实现树的拷贝和析构。最后指出BST存在退化为单支树的问题,为后续讲解平衡二叉搜索树(AVL树和红黑树)做铺垫。

2025-09-08 22:05:59 1231 34

原创 C++进阶——多态

本文系统介绍了C++多态的核心概念与实现机制。主要内容包括:1. 多态分为编译时多态和运行时多态;2. 实现运行时多态需要满足:基类虚函数、派生类重写虚函数、通过基类指针/引用调用;3. 详细解析了虚函数表的工作机制,包括虚函数表指针的存储位置、派生类虚函数表的构成原理;4. 介绍了协变、析构函数重写等特殊情况,以及override/final关键字的使用;5. 对比了重载、重写和隐藏的区别;6. 讲解了纯虚函数和抽象类的特性与用途。通过底层汇编分析和内存模型图示,深入阐释了动态绑定的实现原理。

2025-09-07 19:02:23 766 42

原创 C++进阶——继承(2)

本文主要探讨了C++中继承的几个关键问题:继承与友元的关系表明友元不能继承,需在子类中重新声明;静态成员在被继承时仅保留一个实例;重点分析了多继承中的菱形继承问题,指出其导致的数据冗余和二义性,并介绍了通过虚继承的解决方案;最后对比了继承(is-a)和组合(has-a)的关系,建议优先使用组合以降低耦合度。文章还涉及IO流中的菱形继承实例,强调应避免设计菱形继承结构,除非必须使用虚继承。

2025-09-06 20:37:37 639 4

原创 从零开始的python学习——文件

本文介绍了Python文件操作的基础知识,主要包括文件概念、路径表示、文件操作方法和上下文管理器。文章首先解释了文件作为持久化存储的重要性,介绍了常见的文件类型和路径表示方法。重点讲解了文件的基本操作:使用open函数打开文件,read和write进行读写,以及close关闭文件。特别强调了及时关闭文件的重要性,并介绍了使用with语句的上下文管理器来避免资源泄露。文章还提供了实际代码示例,涵盖了文本文件的读写操作、编码问题处理以及多行文件的读取方法,为Python初学者提供了实用的文件操作指南。

2025-09-06 14:53:06 2839 58

原创 C++进阶——继承 (1)

本文介绍了C++继承机制的核心概念与应用。主要内容包括:1. 继承的基本概念与定义方式,通过Person/Student/Teacher类示例说明代码复用优势;2. 继承中的访问控制规则,分析不同继承方式对成员可见性的影响;3. 基类与派生类的转换规则,重点讲解"切片"特性;4. 继承体系中的作用域问题,特别是同名成员的隐藏规则;5. 派生类默认成员函数的实现要点,包括构造/拷贝/赋值/析构函数的调用顺序;6. 实现不可继承类的两种方法(私有构造/final关键字)。

2025-09-05 21:45:46 808 10

原创 从零开始的python学习——字典

本文介绍了Python字典的基本概念和操作方法。字典是一种键值对结构,通过键快速查找值。文章详细讲解了字典的创建、查找key、新增/修改元素、删除元素、遍历元素、获取所有key和value、以及合法的key类型等内容。字典使用哈希表实现,查找效率高,但要求key必须是可哈希的不可变类型。通过示例代码展示了字典的各种操作,帮助读者掌握字典的基本用法。

2025-09-05 13:22:10 1066 41

原创 C++基础——模板进阶

本文介绍了C++模板的进阶知识,主要包括非类型模板参数、模板特化和模板分离编译。非类型模板参数允许使用常量作为模板参数,相比宏更加灵活,但只支持整型。模板特化分为函数模板特化和类模板特化,类模板特化又分为全特化和偏特化,用于处理特殊类型的特殊情况。模板分离编译时需要注意显示实例化问题,建议将模板定义直接放在头文件中。模板提高了代码复用性,但也可能导致代码膨胀和编译时间增长。理解这些进阶特性有助于更好地利用C++模板的强大功能。

2025-09-04 19:37:50 1161 4

原创 从零开始的python学习——元组

本文介绍了Python中元组的基本概念和操作。与列表不同,元组是不可变序列,创建后不能修改元素。文章详细讲解了元组的创建、访问、切片、遍历、查找等读操作,以及元组不支持修改的特性。同时解释了元组存在的意义:保证数据不被意外修改,适合作为函数参数传递,且是不可变对象(可哈希)。通过对比列表和元组的特性,帮助读者理解何时该使用元组这一数据类型。最后提到元组在多元赋值中的应用,并鼓励读者多加练习掌握这一重要概念。

2025-09-04 12:37:54 1222 33

原创 从零开始的python学习——列表

这篇文章介绍了Python中列表的基本操作,包括创建、访问、切片、遍历、增删查改等。主要内容有:1. 列表的创建方式(字面值或list()函数),支持不同类型元素混合存储;2. 通过下标访问和修改元素,支持负数索引;3. 切片操作获取子列表,支持步长设置;4. 遍历列表的多种方法(for循环、while循环);5. 使用append/insert新增元素;6. 使用in/index查找元素;7. 使用pop/remove删除元素;8. 使用+/extend连接列表。文章采用通俗易懂的比喻(如辣条袋子)帮助理

2025-09-03 16:06:31 1847 39

原创 STL库——deque/priority_queue

本文介绍了C++中的deque容器和priority_queue容器适配器。deque作为双端队列,结合了vector和list的优点,支持高效的头尾插入删除和随机访问,但遍历效率较低。priority_queue是优先级队列,默认使用vector作为底层容器,通过堆结构实现优先级排序。文章详细讲解了deque的实现原理、优缺点,以及priority_queue的使用方法和实现细节,包括仿函数的应用。最后强调掌握这些容器的关键在于理解其特性和适用场景,而非具体实现。

2025-09-02 23:33:01 1072 10

原创 从零开始的python学习——函数(2)

本文深入探讨了Python函数的核心概念,包括变量作用域(全局/局部变量)、函数执行流程、链式调用(函数返回值作为参数)、嵌套调用(函数内部调用其他函数)以及递归(函数调用自身)。文章还介绍了参数默认值和关键字参数的灵活用法,通过调试技巧和代码示例详细解析了函数执行过程。重点强调递归需要终止条件和递推公式,同时指出递归相比循环的优缺点。最后总结了函数参数设计的灵活性,展示了如何通过默认值和关键字参数提升代码可读性和易用性。

2025-09-02 17:47:21 1893 35

原创 从零开始的python学习——函数(1)

本文介绍了Python中函数的基本概念、语法格式、参数传递和返回值。函数是一段可重复使用的代码片段,通过定义形参和实参实现不同数据的处理。文章通过求和函数示例展示了函数的定义和调用方式,并详细讲解了return语句的多种用法,包括多返回值、函数立即结束等特性。强调了一个函数只做一件事的编程原则,建议将计算和输出分离。最后还介绍了如何使用下划线忽略不需要的返回值。全文以通俗易懂的方式讲解了Python函数的核心知识点。

2025-09-01 20:05:14 1394 39

空空如也

空空如也

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

TA关注的人

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