- 博客(133)
- 收藏
- 关注
原创 Linux 基础IO(一) (C语言文件接口、系统调用文件调用接口open,write,close、文件fd)
本文深入探讨了文件操作的系统原理和实现机制。首先从C语言层面分析了文件操作接口,包括fopen、fwrite等函数的底层实现原理,揭示了文件描述符与进程工作目录的关系。然后从Linux系统调用角度解析了open、write等接口,展示了如何使用比特位传递标志位。文章详细阐述了文件访问的本质:进程通过文件描述符表管理打开的文件,最终关联到内核的struct file结构体。同时区分了内核层的struct file和用户层的FILE*结构体,说明了两者的联系与区别。通过对比C标准库函数和系统调用,揭示了文件操作
2025-12-07 17:46:25
1065
原创 Linux 进程控制(三) (进程程序替换,exec系列函数)
本文介绍了Linux系统中进程程序替换的机制和实现方法。通过fork创建子进程后,可以使用exec系列函数实现两种场景:1)父子进程执行不同代码块;2)子进程执行全新程序。重点讲解了exec函数族(execl、execlp、execv、execvp、execle、execvpe)的使用方法和区别,包括参数传递方式(列表或数组)、路径处理(自动搜索PATH或手动指定)以及环境变量处理(继承或自定义)。通过实例演示了如何替换执行系统命令、自定义程序、Shell脚本和Python程序,并解释了进程替换的原理:不创
2025-12-05 21:52:39
604
原创 Linux 进程控制(二) (进程等待wait/waitpid)
本文详细讲解了Linux系统中进程等待的重要性与实现方式。主要内容包括: 进程等待的必要性 子进程退出时若未被回收会形成僵尸进程,导致内存泄漏 父进程必须通过wait/waitpid获取子进程退出状态和资源回收 进程等待的实现机制 wait函数:阻塞等待任意子进程退出 waitpid函数:更灵活的等待方式,可指定子进程PID和等待模式 通过status参数获取子进程退出状态(正常/异常终止及退出码) 实际应用场景 单子进程和多子进程的回收处理 阻塞与非阻塞等待方式的区别 父进程在等待期间执行其他任务的轮询机
2025-12-05 21:52:37
839
原创 linux 进程控制(一) (fork进程创建,exit进程终止)
本文主要探讨了进程创建和终止的相关机制。在进程创建方面,详细介绍了fork函数的工作原理,包括父子进程的内存分配、内核数据结构复制以及写时拷贝技术。在进程终止方面,分析了三种退出场景(运行成功、运行失败、异常终止),比较了return、exit和_exit的区别,并解释了缓冲区刷新机制。文章还讨论了进程异常终止的原因,介绍了常见信号及其作用,如SIGKILL、SIGTERM等。通过实验演示了不同终止方式的行为差异,帮助深入理解进程管理机制。
2025-12-03 21:52:26
1190
原创 算法题 双指针
双指针算法是一种优化暴力枚举的高效方法,通过两个同向移动的指针减少不必要的计算。本文介绍了四个典型应用案例:1)"唯一的雪花"通过哈希表统计元素频率,找到最长无重复子数组;2)"逛画展"利用数组统计元素种类,寻找包含所有画家作品的最短区间;3)"字符串"寻找包含所有26个字母的最短子串;4)"丢手绢"通过维护窗口和计算距离差,找到最优解。每个案例都从暴力解法出发,逐步优化为双指针方案,强调理解算法本质而非记忆模板。关键点包括窗口
2025-12-03 21:51:32
974
原创 算法---前缀和/差分
初始化 f[0] = 0 (前0项和为0),然后遍历数组 a ,通过递推公式 f[i] = f[i-1] + a[i] 计算出所有 f[i]。(比如示例中 a = [1,2,4] ,则 f[1]=1 , f[2]=1+2=3 , f[3]=3+4=7 )- 二维前缀和公式需要用到 i-1 和 j-1 (比如 f[i-1][j] ),如果下标从0开始,当 i=0 或 j=0 时会出现数组越界(访问 f[-1][...] )。- 内层 for (int y2 = m;
2025-11-27 21:48:20
675
原创 Linux 进程概念(四) (命令行参数和环境变量)
本文主要探讨了命令行参数和环境变量在Linux系统中的工作原理与应用。命令行参数通过main函数的argc和argv实现程序行为的动态调整,这是Linux命令选项功能的实现基础。环境变量如PATH定义了系统查找可执行程序的路径,具有全局属性,子进程会继承父进程的环境变量。文章还介绍了本地变量与环境变量的区别,以及如何通过export将本地变量转为环境变量。最后区分了常规命令(二进制文件)和内建命令(shell内部函数)的不同特性。这些机制共同构成了Linux系统灵活的命令执行和环境配置体系。
2025-11-27 21:47:23
833
1
原创 Linux 进程概念 (三) (进程状态,僵尸进程,孤儿进程,进程优先级)
本文系统介绍了操作系统中的进程状态及其管理机制。主要内容包括:1. 进程三大核心状态:运行(R)、阻塞(S/D)、挂起状态及其转换关系;2. Linux特有的进程状态实现,如深度睡眠(D)、僵尸(Z)等特殊状态;3. 进程优先级管理(PRI/NI)和调度机制;4. 进程间关系(竞争/独立/并发)及实现原理;5. 特殊进程(僵尸/孤儿)的产生原因和处理方法。重点阐述了进程状态转换与资源管理的关系,以及Linux如何通过调度队列、写时复制等技术实现进程的高效管理。
2025-11-25 20:34:03
1281
1
原创 Linux 进程调度(Linux2.6版本内核)
Linux 2.6内核采用通用双向链表(list_head)实现高效进程调度。该设计包含三个核心要素:通用链表节点、侵入式嵌入和container_of宏。进程控制块(task_struct)通过嵌入多个list_head节点,可同时挂载到不同队列(如运行队列、阻塞队列)。O(1)调度器基于runqueue结构,使用活跃/过期双队列(prio_array_t)和优先级位图(bitmap),实现快速进程选择与队列切换。通过list_head的链表操作和指针交换,调度器能在常数时间内完成进程调度,体现了Linu
2025-11-25 20:33:46
731
1
原创 C++ AVL树(二叉平衡搜索树)的概念讲解与模拟实现
AVL树是一种自平衡二叉搜索树,通过旋转操作保持左右子树高度差不超过1,确保查找效率为O(logN)。文章详细介绍了AVL树的概念、实现原理和四种旋转方法(左单旋、右单旋、左右双旋、右左双旋),并提供了C++实现代码。通过两组测试数据验证了AVL树在插入、查找和平衡性方面的正确性,特别展示了其在大数据量下的高效性能(百万级数据仍保持平衡)。AVL树的核心优势在于通过动态调整结构维持平衡,从而保证高效的查找性能。
2025-11-23 20:15:25
1115
1
原创 Linux---进程理解(二) (进程创建fork的介绍与使用)
本文介绍了Linux中fork系统调用的使用方法和原理。主要内容包括:1)通过getpid和getppid获取进程ID及父进程ID,验证了bash作为终端父进程的角色;2)详细讲解了fork的工作原理,包括其独特的返回值机制(父进程返回子进程PID,子进程返回0);3)分析了fork后父子进程的执行流程,说明其如何通过返回值实现代码分流;4)解答了关于fork常见疑问,如返回值设计原理、函数"返回两次"现象的本质等。文章通过代码示例展示了fork创建子进程的过程,并深入解析了进程创建和管
2025-11-22 21:55:27
1099
1
原创 Linux---进程概念(一)——冯诺依曼体系、操作系统、进程、PCB的概念讲解
本文系统阐述了计算机系统的核心概念。首先介绍了冯诺依曼体系结构,包括五大组件(输入设备、存储器、运算器、控制器、输出设备)及其协作关系,重点解释了内存作为CPU与磁盘间缓冲的重要性。其次深入剖析了操作系统的本质,即通过"先描述再组织"的方式管理软硬件资源,将管理对象抽象为数据结构进行操作。然后详细讲解了进程概念,指出进程由内存中的程序代码/数据和PCB(进程控制块)共同构成,并阐述了进程调度中上下文切换的机制。最后说明了进程标识符的获取方式,强调用户程序必须通过系统调用访问内核数据结构。
2025-11-22 21:54:41
868
原创 算法---模拟/高精度/枚举
1.模拟模拟,顾名思义,就是题目让你做什么你就做什么,考察的是将思路转化成代码的代码能力。这类题一般较为简单,属于竞赛里面的签到题(但是,万事无绝对,也有可能会出现让人非常难受的 模拟题),我们在学习语法阶段接触的题,大多数都属于模拟题。
2025-11-20 21:48:09
1065
4
原创 Linux---Linux调试工具gdb/cgdb的使用
本文介绍了GDB和CGDB调试工具的使用方法。GDB是Linux下的命令行调试工具,CGDB在其基础上增加了可视化代码窗口。要调试程序需使用-g选项编译生成debug版本。调试主要操作包括:启动/退出调试器、查看代码、运行程序、设置/管理断点、单步执行(逐过程或逐语句)、查看变量值、跟踪变量变化等。补充命令如watch可监控数据变化,setvar可修改变量值,条件断点能实现精准调试。CGDB相比GDB具有更直观的代码显示,但核心调试功能完全兼容GDB命令。
2025-11-20 21:46:58
831
1
原创 算法题 双指针
这种方法的时间复杂度为 O(n^2)(排序为 O(n\log n),外层遍历 O(n),内层双指针 O(n),整体由 O(n^2) 主导),空间复杂度为 O(\log n)(主要为排序的空间开销),能够高效解决该问题。- 若 nums[left] + nums[right] == -a ,则找到一个有效三元组 [a, nums[left], nums[right]]。- 若 nums[left] + nums[right] > -a ,说明和太大,将 right 左移(减小和);
2025-11-16 19:50:52
1063
原创 C++ STL之map/set/multimap/multiset的使用
STL关联式容器主要包括map/set和unordered_map/unordered_set两大类。map/set底层采用红黑树实现,元素自动排序且key值唯一(multiset/multimap允许多个相同key)。set存储单一key值,map存储键值对<key,value>,其key被声明为const确保不可修改。这些容器提供高效查找(O(logN)),支持插入、删除、查找等操作,并包含lower_bound/upper_bound等区间查询功能。相比序列式容器,关联式容器通过key而非
2025-11-16 19:45:43
1014
原创 Linux---Linux编译器-gcc/g++的使用
GCC/G++是Linux中的编译器工具链,GCC主要处理C语言但也能编译C++(需手动加载库),G++专为C++设计(自动处理类/模板和标准库)。编译流程包括预处理(宏替换/去注释等)、编译(转为汇编)、汇编(生成二进制)、链接(生成可执行文件)。链接分为动态链接(依赖外部库,体积小)和静态链接(库代码打包进程序,体积大但独立)。动态库后缀为.so,静态库为.a。GCC默认动态链接,静态链接需加-static参数。动态链接节省资源但依赖系统库,静态链接独立但体积庞大。核心库如libc.so.6是系统关键组
2025-11-15 21:36:00
977
原创 C++ 二叉搜索树的模拟实现(key结构的非递归和key_value结构的非递归的实现)
二叉搜索树(BST)是一种具有特定排序性质的二叉树结构,左子树节点值均小于根节点,右子树节点值均大于根节点。本文详细介绍了二叉搜索树的两种实现方式:key模型(单纯存储键值)和key_value模型(存储键值对)。重点讲解了节点的插入、查找、删除等核心操作的非递归实现方法,包括处理删除时的三种不同情况(左右子树为空或非空)。文章还探讨了二叉搜索树与中序遍历的关系,并通过具体应用场景(如词典查找、词频统计)展示了其实用价值,最后给出了完整的C++实现代码。
2025-11-13 21:54:44
818
1
原创 C++ 面向对象三大特性之一---多态
摘要:本文深入探讨了C++中的多态特性。多态分为编译时多态(如函数重载)和运行时多态(虚函数机制)。重点分析了虚函数表结构、虚函数重写规则及其内存原理,解释了基类指针/引用调用派生类函数的机制。文章详细讨论了协变、析构函数重写、override/final关键字等高级特性,对比了重载、重写和隐藏的区别。通过示例代码验证了虚函数表存储在代码段的事实,阐述了多态的实现原理。最后解答了关于虚函数的常见问题,包括构造函数、析构函数为何不能/需要声明为虚函数等。本文系统性讲解了C++多态从概念到实现的完整知识体系。
2025-11-08 17:14:29
992
1
原创 C++ 面向对象三大特性之一——继承
本文系统介绍了C++继承机制,重点包括: 继承概念与作用:实现类层次复用,派生类可扩展基类功能。 继承方式与访问控制:详细说明public/protected/private继承对成员可见性的影响。 派生类构造/析构规则:强调基类成员初始化顺序与显示调用必要性。 菱形继承问题:通过虚继承解决数据冗余和二义性。 继承与组合对比:分析is-a与has-a关系的适用场景,建议优先使用组合降低耦合度。 继承是面向对象核心特性,正确使用能有效提高代码复用性和可维护性。
2025-11-01 21:06:44
869
原创 算法题 逆波兰表达式/计算器
本文介绍了逆波兰表达式(后缀表达式)及其计算实现方法。逆波兰表达式将运算符置于操作数之后,通过栈结构实现高效计算。主要内容包括:1)逆波兰表达式概念及计算原理,通过栈结构处理数字和运算符;2)中缀表达式转后缀表达式的方法,使用栈管理运算符优先级和括号嵌套;3)计算器实现方案,结合预处理、中缀转后缀和后缀表达式求值三个步骤完成复杂表达式计算。文章通过具体代码示例展示了从表达式转换到最终计算的完整流程,并详细解释了各步骤的实现逻辑和注意事项。
2025-10-28 20:42:06
641
1
原创 C++ 模板进阶
文章摘要: C++模板中的非类型模板参数允许使用常量作为模板参数,解决固定大小容器需求问题。函数模板特化可针对特定类型定制行为,但通常优先使用函数重载。类模板特化分为全特化和偏特化,通过部分参数特化或类型约束实现灵活定制。模板分离编译存在挑战,需通过显式实例化或声明定义合并解决。模板优点在于代码复用和灵活性,但会导致代码膨胀、编译时间增长和错误信息复杂化。
2025-10-28 20:41:55
1143
1
原创 C++ 重谈拷贝构造函数
拷贝构造函数在以下三种情况下触发:1)显式用已有对象初始化新对象;2)函数参数为类对象(非引用/指针)时;3)函数返回类对象(非引用/指针)时。其参数必须为常量引用以避免无限递归。C++默认提供浅拷贝,仅复制成员值;当类包含指针等引用型成员时,需自定义深拷贝构造函数,为新对象独立分配内存并复制数据。深拷贝确保新旧对象完全独立,防止指针悬挂等问题,是处理动态资源时的必要手段。
2025-10-09 19:53:24
710
原创 Linux开发工具vim的使用详解
Vim是一款跨平台的轻量级文本编辑器,以键盘操作为核心,支持多模式编辑(命令/插入/底行模式),是Linux开发的重要工具。GCC/G++是Linux下的编译器,支持预处理、编译、汇编和链接四步编译流程,可生成动态或静态链接的可执行文件。GDB是调试工具,需配合-g选项生成的debug版本程序使用,支持断点设置、变量监控等调试功能。这三种工具共同构成了Linux下C/C++开发的完整工具链。
2025-10-08 19:35:54
1037
原创 Linux自动化构建工具make/Makefile及Linux下的第一个程序—进度条
本文介绍了自动化构建工具make和Makefile的基本概念与使用方法。make是自动化构建工具,Makefile是定义构建规则的配置文件,二者配合可实现高效的项目编译。文章详细讲解了Makefile的编写规则,包括依赖关系、伪目标(.PHONY)和自动化变量($^, $@)的使用。同时通过实例演示了从源代码到可执行文件的完整编译过程,并介绍了Linux下进度条程序的实现原理,重点讲解了缓冲区刷新策略和\r回车符的使用技巧。最后展示了一个带动态加载动画的进度条小程序实现,体现了Linux环境下程序开发的实用
2025-10-08 19:34:26
883
原创 Linux软件包管理器,软件生态及yum的安装介绍
Linux软件安装与管理摘要:本文介绍了Linux系统下三种主要软件安装方式(源代码、RPM包和包管理器),重点讲解了包管理器的工作原理。通过类比"应用商店",阐述yum/apt等包管理器如何自动解决依赖关系、从软件仓库获取并安装软件包。文章还解析了国内镜像源的作用、软件包依赖关系处理机制,以及CentOS和Ubuntu系统下安装源配置的差异。最后详细说明了yum/apt的常用命令(安装、卸载、查询)及使用注意事项,强调了网络连接对包管理器操作的重要性。
2025-10-03 20:11:11
1023
原创 Linux 权限的概念及shell命令运行原理
本文介绍了Linux系统中的权限管理和用户切换机制。主要内容包括:1) Linux文件权限分为可读、可写、可执行三种属性;2) 用户类型分为超级用户(root)和普通用户,通过su命令可切换用户身份;3) 权限与角色(拥有者、所属组、其他用户)相关联;4) 使用chmod、chown等命令修改权限和所有者;5) 目录权限和粘滞位的特殊作用;6) shell作为用户与内核交互的中介,提供指令解析和安全保护功能。文章详细说明了Linux权限系统的设计原理和操作方法,帮助理解多用户环境下的权限控制机制。
2025-10-03 13:30:47
982
原创 Linux 基本指令完整版(2)
本文系统介绍了Linux系统中常用的基础命令及其功能,包括文件和目录操作、文本处理、系统监控、压缩解压等六大类指令。详细讲解了ls、cd、mkdir等基本文件操作命令,cat、grep、head等文本处理工具,top、htop进程监控指令,以及zip、tar等压缩工具的使用方法。同时阐述了Linux命令作为可执行文件的本质特性,并介绍了管道、重定向等高效数据处理机制。文章还涵盖了日期查看、计算器、关机等实用命令,以及快捷键操作,为Linux初学者提供了全面的基础命令参考指南。
2025-10-02 15:20:11
1006
原创 数据结构 排序(3)---交换排序
交换排序是排序算法中的一种基本方法,通过比较和交换元素实现排序。主要包括冒泡排序和快速排序两种典型算法。冒泡排序通过相邻元素比较和交换,逐步将最大元素移到数组末尾,时间复杂度为O(n²)。快速排序采用分治思想,选取基准值将数组划分为左右子区间,递归排序,平均时间复杂度为O(nlogn)。快速排序有多个实现版本,包括Hoare版本、挖坑法、前后指针法等,非递归实现可使用栈来模拟递归过程。交换排序的核心在于通过元素交换实现排序,不同算法在效率和实现方式上各有特点。
2025-09-29 20:43:52
1204
原创 算法题 day9---二叉树(C语言)
本文介绍了二叉树相关的六种算法实现:1. 单值二叉树(递归检查所有节点值相同) 2. 对称二叉树(递归比较左右子树镜像) 3. 相同树(递归判断结构和值完全一致) 4. 子树问题(在树中搜索相同子树) 5. 前序遍历(根-左-右顺序) 6. 中序遍历(左-根-右顺序) 7. 后序遍历(左-右-根顺序) 关键点: 递归终止条件和执行顺序至关重要 前/中/后序遍历区别在于根节点访问时机 子树问题复用相同树判断逻辑 遍历结果需要动态分配数组存储
2025-09-29 20:43:43
757
原创 算法题 day8---单链表(C语言)
这篇文章摘要总结了8个链表相关算法题的解题思路和代码实现: 移除元素 - 通过创建新链表,遍历原链表将非目标值节点尾插到新链表 反转链表 - 使用三指针迭代法逐个反转节点指针方向 链表中点 - 快慢指针法,快指针走2步慢指针走1步 合并有序链表 - 双指针遍历+尾插法,比较节点值大小依次插入 回文链表 - 两种方法:转数组验证或快慢指针+反转后半部分 相交链表 - 计算长度差后同步遍历找交点 环形链表1 - 快慢指针判断是否有环 环形链表2 - 快慢指针找入环点,利用数学规律定位 各题均采用高效解法,时间复
2025-09-19 21:07:32
1070
原创 数据结构 静态链表的实现(算法篇)
本文系统介绍了静态链表的实现原理和操作,重点讲解了单链表和双向链表的静态数组实现方法。主要内容包括:1. 静态链表的核心组件:使用数组e[N]存储数据,ne[N]存储后继节点下标,通过下标id分配新节点位置;2. 单链表操作实现:详细说明了头插、遍历、按值查找、任意位置插入和删除等操作的O(1)实现方法;3. 双向链表扩展:在单链表基础上增加pre[N]数组实现前驱指针,支持双向遍历和前向插入操作;4. 性能优化技巧:引入mp数组实现O(1)时间复杂度的按值查找,体现空间换时间的优化思想;5. 实际应用建议
2025-09-19 19:45:47
1309
原创 算法题 day7 ---vector
本文摘要: 本文介绍了五个编程问题的解法思路和代码实现。1)询问学号问题:通过数组存储学号,实现快速索引查询;2)寄包柜问题:使用vector数组动态管理柜子格子,实现高效存取操作;3)移动零问题:提出辅助数组和双指针两种解法,后者更优;4)颜色分类问题:采用三指针法将数组分为四个区间进行排序;5)合并有序数组问题:提供辅助数组和原地合并两种方法,后者空间效率更高。各解法均分析了时间/空间复杂度,并给出示例演示。
2025-09-17 18:29:48
767
原创 C++ STL之优先级队列详解
优先级队列是一种基于堆结构的容器适配器,其核心特性是按优先级访问元素。它通过封装底层容器(默认vector)和堆算法实现,支持高效插入、删除和访问最大/最小元素的操作。优先级队列的实现依赖于向上调整(AdjustUp)和向下调整(AdjustDown)算法来维护堆结构,并使用仿函数(如Less或Greater)来灵活控制排序规则。在自定义类型使用时需重载比较运算符,指针类型则需要自定义比较仿函数。优先级队列广泛应用于需要高效获取极值元素的场景,如TopK问题等。其时间复杂度为:插入O(logn)、删除O(l
2025-09-17 13:01:25
1249
1
原创 C++ STL之deque的使用和模拟实现
摘要: 双端队列deque是STL中的动态序列容器,支持两端高效插入/删除和随机访问,填补了vector和list的功能空白。其底层通过"中控器+分段缓冲区"实现,兼具vector的随机访问和list的双端操作优势,但中间操作效率较低。deque是stack和queue的默认底层容器,因其完美适配二者仅需单端或双端操作的特点。虽然deque平衡了功能与性能,但在实际应用中仍存在遍历效率低、中间操作慢等缺陷,通常在需要频繁随机访问时选择vector,频繁中间操作时选择list更为合适。
2025-09-15 18:21:28
972
1
原创 C++ stack和queue的使用及模拟实现
本文介绍了C++中的容器适配器stack和queue的实现原理与使用方法。stack是后进先出(LIFO)的容器适配器,通过封装底层容器(vector/deque/list)的尾插尾删操作实现;queue是先进先出(FIFO)的容器适配器,通过封装底层容器(deque/list)的尾插头删操作实现。文章详细讲解了它们的模板设计、接口封装原理,并通过具体代码示例展示了如何自定义实现这两种适配器。同时分析了两者的底层容器选择策略,解释了为什么stack默认使用deque而queue不能使用vector的原因。最
2025-09-13 19:12:39
1352
1
原创 算法题 Day6---String类(3)
本文摘要: 回文判断的三种方法:双指针法(两端向中间遍历)、标记法(全程检查字符)和反转对比法(比较原字符串与反转字符串)。 手机按键次数统计:通过预存字母按键次数的数组,累加输入字符串中各字符对应的按键次数(包括空格处理)。 口算练习题处理:使用状态变量记录上一次运算类型,处理两种输入格式(三数据和两数据),利用字符串拼接生成完整算式并计算长度。 代码特点: 回文判断:强调原地操作和状态维护 手机按键:使用数组映射提高效率 口算题:结合字符串转换和条件分支处理多种输入情况 文章还补充了C++中字符串与数值
2025-09-12 21:22:16
697
原创 C++ list的模拟实现
本文详细解析了C++中list容器的模拟实现,重点介绍了带头双向循环链表的结构设计和迭代器实现。主要内容包括: 链表节点设计:采用模板类__list_node包含prev、next指针和数据域,支持默认构造和灵活初始化; 哨兵节点机制:通过不存储数据的哨兵头节点简化边界操作,形成循环链表结构; 迭代器实现:封装节点指针,重载操作符模拟指针行为,通过模板参数区分普通迭代器和const迭代器; 核心接口实现:包括push_back、insert、erase等操作,以及现代写法实现的拷贝构造和赋值重载。 该实现完
2025-09-12 19:41:23
1179
原创 C++ STL之list的使用
本文系统介绍了C++标准库中的list容器,主要包含以下内容:1. list的基本特性:作为双向链表实现的序列容器,支持高效任意位置插入删除操作,但不支持随机访问;2. 常用操作:详细讲解了构造函数、遍历方式(size/iterator/range-for)、元素操作(push/pop/insert/erase/clear/swap)等核心功能;3. 特殊算法:包括sort、unique、remove等专用成员函数的使用方法及效率特点;4. 迭代器特性:分析了list迭代器失效问题,并与vector进行对比
2025-09-10 21:55:12
1358
原创 算法题 Day5---String类(2)
示例: swap_ranges(v1.begin(), v1.end(), v2.begin());示例: v.erase(unique(v.begin(), v.end()), v.end());这些函数/方法的共同特点是:操作后原始对象的内容被直接修改,无需赋值给新变量(赋值也只是复用原对象的引用,不会产生新对象)。示例: fill(v.begin(), v.end(), 0);示例: sort(v.begin(), v.end());示例: v.erase(v.begin() + 2);
2025-09-10 21:55:06
677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅