自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程概念和线程控制

线程概念与Linux实现 线程是进程内部的执行流,Linux内核中通过轻量级进程(LWP)实现线程。与传统进程不同,线程共享进程的地址空间、文件描述符等资源,但拥有独立的栈和寄存器上下文。Linux内核使用task_struct统一管理进程和线程,线程创建时通过clone()系统调用共享父进程资源,而非创建全新地址空间。这使得线程调度更高效,CPU只需处理独立的执行流task_struct。 线程控制与创建 使用pthread_create()创建线程时,需注意: 线程函数参数应为堆内存或全局变量,避免栈变

2026-01-24 22:50:49 685

原创 分页式存储管理——内存高效管理的基石

分页机制与内存管理 分页机制通过将内存划分为固定大小的页框(通常4KB),解决了内存碎片问题。虚拟内存和物理内存被分割为相同大小的页和页框,通过页表建立映射关系,使程序看到的连续虚拟地址可以映射到离散的物理内存空间。 多级页表设计(如二级页表)减少了连续内存需求,通过页目录和二级页表的分层管理,将大页表拆分为多个小页表分散存储。地址转换过程由MMU硬件完成,通过CR3寄存器定位页目录,结合虚拟地址的高10位和中10位索引查找物理页框。 页表项包含关键控制位(如有效位、读写权限、脏位等),用于内存管理和访问控

2026-01-24 18:59:28 848

原创 进程间通信之管道

进程间通信(IPC)核心机制 摘要:本文阐述了进程间通信(IPC)的基本原理和实现方式。重点分析了管道机制,包括匿名管道和命名管道的底层实现、使用场景及编程接口。通过父子进程通信示例展示了匿名管道的实际应用,并介绍了基于匿名管道的进程池设计方案。文章还详细讲解了管道文件描述符管理、读写特性等关键技术点,为理解操作系统进程通信机制提供了实践参考。 (148字) 核心要点: IPC通过内核共享资源实现进程间数据交换 匿名管道仅限亲缘进程通信,命名管道支持任意进程 管道本质是内核缓冲区,需合理管理文件描述符 进程

2026-01-20 18:46:49 788

原创 基于CSAPP对链接和库的理解

本文介绍了静态库和动态库的概念、生成方法及使用方式。静态库在编译时将代码复制到可执行文件中,生成独立运行的程序;动态库则在运行时加载,支持多进程共享内存。静态库通过ar命令打包.o文件生成,使用-l选项链接;动态库通过gcc -fPIC -shared生成位置无关码。两者区别在于链接时机和资源占用:静态库独立但体积大,动态库节省内存但依赖运行时环境。文章还演示了如何将库安装到系统目录或指定路径使用,并指出默认情况下gcc优先使用动态库,可通过-static强制使用静态库。

2026-01-11 21:34:30 694

原创 基于inode的文件系统

持久化存储演进与磁盘技术 摘要:本文系统梳理了持久化存储技术的发展历程,从远古石刻到现代磁盘技术。重点分析了机械硬盘的物理结构(盘片、磁头、磁头臂等)及其工作原理,详细解释了磁盘的存储层级(柱面、磁道、扇区)和CHS/LBA寻址方式。同时介绍了文件系统的基本概念,包括块设备、分区机制和inode数据结构。通过技术演进的分析,展现了存储设备如何从简单的数据保存发展到支持高效随机访问的现代存储系统。

2026-01-11 21:28:13 740

原创 25.12.27 理解文件本质+文件系统调用接口+fd+重定向

本文主要探讨文件系统操作和文件描述符(fd)的相关概念。首先介绍了文件由属性和内容组成,重点分析加载到内存中的文件及其与进程的关系。其次详细讲解了文件操作系统调用接口open()的使用方法及其参数flags和mode的含义。然后深入解析文件描述符的本质是数组索引,并说明其分配原则:默认打开stdin/stdout/stderr(0/1/2),新文件按最小未分配索引递增分配。最后通过dup2()系统调用实现重定向功能,将标准输出重定向到文件,并用示例代码验证了重定向效果。全文系统性地阐述了Linux环境下文件

2025-12-27 23:22:01 263

原创 25.12.27 算法日记——双指针

本文介绍了LeetCode中两道经典的双指针算法题解: 两数之和II:利用有序数组特性,通过左右指针向中间收敛寻找目标和,时间复杂度O(n),空间O(1)。注意返回索引需+1。 三数之和:将问题转化为两数之和,先排序数组,再固定一个数后用双指针搜索。关键点包括去重处理(跳过重复元素)和提前终止优化(当基准数>0时停止)。时间复杂度O(n²),空间O(logn)。 两题均利用了有序数组的特性,通过双指针技巧高效解决问题,并涉及C++的初始化列表、排序等知识点。解题时需特别注意边界条件和去重逻辑的处理。

2025-12-27 23:19:51 1164

原创 进程控制详解

本文介绍了Linux进程控制的相关知识,主要包括进程创建和终止两个部分。在进程创建方面,详细讲解了fork函数的工作原理、写时拷贝机制以及fork的常见用法和失败原因。在进程终止部分,阐述了进程终止的本质、三种终止场景(正常成功、正常失败、异常终止),并具体说明了进程退出的方法(main返回、exit、_exit)和退出码的含义。文章通过代码示例和图示,清晰展示了父子进程的执行流程和内存管理机制,帮助读者深入理解Linux进程控制的核心概念。

2025-12-25 22:42:08 722

原创 Linux 进程底层拆解:从 “先描述再组织” 到 O (1) 调度,程序员必备 OS 知识

本文介绍了Linux系统中进程的基本概念、管理方式及相关操作。主要内容包括:1)进程本质是内核数据结构与程序代码数据的组合,内核通过PCB(进程控制块)进行管理;2)详细解析了PCB的内部结构,包括标识符、状态、优先级等核心属性;3)介绍了查看进程的三种方法:/proc文件系统、ps指令和top指令;4)深入讲解了fork函数的原理,通过代码示例展示了父子进程的数据独立性。文章通过理论讲解与实例演示相结合的方式,系统性地介绍了Linux进程管理的核心知识。

2025-12-21 20:34:27 569

原创 Linux常见工具使用

本文介绍了Makefile的基本结构和规则,通过一个简单的C++项目演示了Makefile的使用方法。主要内容包括: 项目结构:展示了一个包含add.h、add.cpp和main.cpp的简单C++项目 Makefile解析: 变量定义:使用SRC、OBJ、BIN变量管理源文件和目标文件 默认目标:定义可执行文件的生成规则 编译规则:使用模式规则将.cpp文件编译为.o文件 清理规则:使用.PHONY声明伪目标 构建过程: 详细解释了make命令的依赖推导过程 说明了目标文件和依赖文件的时间戳比较机制 演示

2025-12-17 22:17:34 771

原创 初识操作系统

本文介绍了冯诺依曼体系结构和操作系统的基本概念。冯诺依曼体系结构规定计算机由输入设备、输出设备、存储器和CPU组成,所有数据必须经过内存与CPU交互,这种设计通过内存作为高速缓存解决了外设与CPU效率不匹配的问题。操作系统作为中间层,向上为用户程序提供简单接口,向下统一管理硬件资源,其核心思想是"先描述,再组织",通过封装系统功能和抽象硬件操作,使整个系统有序运行。文章还通过实例说明了数据在冯诺依曼体系中的流动过程。

2025-12-17 21:00:51 861

原创 g++演示如何从C++代码到可执行程序

本文介绍了C++代码从编写到生成可执行文件的完整编译过程。文章通过示例代码演示了预处理、编译、汇编和链接四个关键阶段:预处理阶段处理宏替换和头文件展开;编译阶段进行语法分析、语义检查和模板实例化;汇编阶段生成机器码目标文件;最后链接阶段合并目标文件并解析符号依赖。文中特别强调了模板实例化的时机、符号表的作用以及重定位信息的重要性,并通过实际命令操作展示了每个阶段的输出结果,帮助读者直观理解C++程序的编译流程。

2025-12-14 18:52:24 1027

原创 别再为博客图片失效抓狂!Gitee+PicList,永久免费的解决方案

本文介绍了Linux系统中文件和目录的基本操作。首先阐述了Linux树状目录结构的特点,然后详细讲解了创建目录(mkdir)和文件(touch)的方法,包括递归创建目录(-p选项)和修改文件时间属性。接着演示了文件内容的写入与读取操作,重点讲解了echo、printf、cat等命令以及输出重定向(>和>>)的使用。最后介绍了删除文件(rm)的注意事项,强调递归删除(-r)和强制删除(-f)选项的危险性,特别是警告不要使用rm -rf /命令。文章通过具体命令示例展示了每个操作的实际效果,帮

2025-12-05 19:46:18 1142 1

原创 Linux常见指令

本文介绍了Linux文件系统的基本操作,包括目录和文件的创建、修改、删除以及内容读写。主要内容有: 目录操作:使用mkdir命令创建目录,-p选项可递归创建多级目录结构 文件操作: touch命令创建空文件或修改文件时间属性 echo和printf命令写入内容,配合重定向符号>和>>实现覆盖或追加写入 cat和tac命令查看文件内容,支持正序和逆序显示 文件系统特性:Linux采用树状目录结构,所有文件以根目录/为起点,并遵循"一切皆文件"的理念 文章通过具体命令示例演

2025-12-05 19:42:11 828 1

原创 C++ 内存安全双保险:异常处理 + 智能指针,彻底跟内存泄漏说 “再见”

本文介绍了C++异常处理机制,主要包括以下内容: C传统错误处理方式的局限性:终止程序或返回错误码存在用户体验差和繁琐的问题。 C++异常概念:通过throw抛出异常,catch捕获异常,try包裹可能出错的代码。 异常匹配原则: 抛出对象类型决定匹配的catch块 异常沿调用链向上传播,由最近的匹配catch处理 异常对象会被拷贝到catch块中 catch(...)可捕获所有类型异常 异常栈展开过程:从抛出位置开始,沿调用栈向上查找匹配catch块,直到main函数仍未匹配则程序终止。 异常重新抛出机制

2025-11-28 16:22:46 727 1

原创 别再只懂 C++98!C++11 这7个核心特性,直接拉开你与普通开发者的差距

本文介绍了C++11中的初始化方式、声明方式和右值引用相关内容。主要内容包括: 初始化方式: 扩展了{}初始化范围,可用于所有内置和自定义类型 介绍了std::initializer_list的实现原理和使用方法 声明方式: auto关键字实现类型自动推断 decltype获取表达式类型 右值引用: 区分左值和右值 左值引用和右值引用的区别 右值引用的应用场景,通过move语义减少拷贝开销 文章通过代码示例展示了这些新特性的具体用法,帮助理解C++11在语言层面所做的改进。

2025-11-28 16:16:32 1386 2

原创 O (1) 查找神技!哈希表核心玩法全解析,闭散列 + 开散列实战代码直接抄

本文介绍了哈希表的基本概念及实现方法。哈希表通过哈希函数建立元素与存储位置的映射关系,实现高效查找(O(1)时间复杂度)。主要内容包括:1)哈希冲突的概念及原因;2)常用哈希函数如直接定址法和除留余数法;3)两种解决冲突的方法 - 闭散列(线性探测)和开散列(链地址法),并给出具体实现代码。重点分析了扩容机制,当负载因子超过0.7时需要扩容重建哈希表。哈希表通过空间换时间的策略,大幅提升了查找效率。

2025-11-15 22:41:16 735 9

原创 踩爆 8 个坑后,我悟了!unordered_map 底层封装的正确姿势(代码可直接抄)

本文介绍了如何从基础的KV模型哈希表逐步改造为支持泛型T的哈希桶,最终封装成unordered_map和unordered_set。主要步骤包括:1) 将节点从pair<K,V>抽象为泛型T;2) 引入KeyOfT策略类从T中提取key;3) 实现通用哈希桶HashTable<K,T,KeyOfT,Hash>;4) 添加迭代器支持;5) 封装具体容器类。文章特别指出了实现过程中的常见错误,如节点类型使用不当等。通过这种分层设计,可以复用同一套哈希桶实现来支持不同的关联容器需求。

2025-11-15 22:40:41 1180 3

原创 不再死记!红黑树默认红色的原理 + LL/RR/LR/RL 全图解

红黑树是一种自平衡二叉搜索树,通过节点颜色(红/黑)和旋转操作维护平衡。本文介绍了红黑树的基本概念、性质(根黑、无连续红、路径同黑数),对比了AVL树与BST的差异,突出了红黑树在插入删除效率上的优势。详细解析了插入操作的实现逻辑:新节点默认红色,若父节点为红则需调整,分"叔叔红"(变色)和"叔叔黑"(旋转+变色)两种情况处理,并给出LL/RR/LR/RL四种旋转场景的图示与代码实现。文中附有节点定义示例和完整插入代码,强调红黑树通过适度放宽平衡条件换取更高操作效率的

2025-11-01 19:53:48 1892 23

原创 别再让搜索树变竹竿!AVL 旋转四连招详解!

摘要:AVL树是一种自平衡二叉搜索树,通过平衡因子(右子树高度-左子树高度)确保每个节点平衡因子的绝对值≤1。当插入或删除导致树失衡(平衡因子为±2)时,通过旋转操作(右旋、左旋等)恢复平衡。文章详细分析了AVL树的结构定义、插入逻辑以及旋转操作(以右旋为例),展示了如何通过调整子树高度保持高效操作性能,解决普通二叉搜索树退化为链表的问题,实现O(logn)的时间复杂度。

2025-10-30 20:00:53 961 49

原创 初学二叉搜索树踩坑多?C++ 从原理到代码,搞定增删查全流程

本文介绍了二叉搜索树的基本概念和操作实现。二叉搜索树满足左子树节点值小于根节点值,右子树节点值大于根节点值的特性。文章详细讲解了查找、插入和删除三种核心操作:查找采用二分思想,时间复杂度为O(logn);插入需找到合适位置并保持树结构;删除则根据节点子节点数量分为三种情况处理,重点阐释了删除有两个子节点时的替换策略。通过C++代码示例展示了二叉搜索树类的具体实现方法,包括节点结构定义和各类操作的算法流程。

2025-10-27 13:11:16 1782 52

原创 “码”上认亲!面向对象之多态:一脉相承的「同名不同用」

文章摘要:本文介绍了C++多态的概念及实现方式。通过虚函数机制,可以让不同类型的对象执行相同行为时产生不同结果。重点讲解了基类析构函数声明为虚函数的重要性,以避免内存泄漏问题。同时介绍了C++11引入的override和final关键字,用于确保正确重写虚函数或禁止重写。文章还分析了多态的实现条件,包括基类虚函数重写、基类指针或引用调用虚函数等关键点。

2025-10-23 16:01:19 740 15

原创 “码” 上认亲!面向对象之继承:解锁代码的 “家族传承” 密码

本文介绍了C++中继承的基础知识,主要包含以下内容: 继承的定义:继承是面向对象程序设计中实现代码复用的重要手段,允许在保持原有类特性的基础上进行扩展。 继承语法:通过示例展示了鱼类基类(Fish)和派生类(Carp、Tuna)的实现方式,解释了protected限定符的作用。 基类初始化:演示了如何使用派生类构造函数通过初始化列表向基类传递参数。 方法覆盖:说明如何在派生类中覆盖基类方法,并提供了畜牧业动物类的示例。 显式调用:介绍了如何在派生类中通过作用域限定符显式调用基类方法。 文章通过多个具体代码示

2025-10-20 17:23:06 917 51

原创 字符串相关OJ题解析(图文并茂+过程演示)

本文介绍了常见的字符串算法处理方法

2025-10-18 16:02:36 1072 50

原创 别再被模板折磨了:非类型参数 + 特化 + 分离编译一网打尽

本文介绍了C++模板中的非类型模板参数和模板特化两大特性。非类型模板参数允许将编译期确定的值作为模板参数,常用于静态数组大小配置,如std::array<T,N>的实现。模板特化则针对特定类型提供定制化实现,包括函数模板特化(需保持参数类型一致)和类模板特化(分全特化和偏特化)。全特化完全指定所有模板参数,偏特化可针对参数组合(如指针类型或固定部分参数)进行特化处理。通过特化能解决特殊类型场景下的问题,如指针比较的误判情况。文中通过日期类比较、类模板特化等示例代码,直观展示了这些特性的应用场景和

2025-10-14 12:46:35 992 20

原创 从底层到上层的“外挂”:deque、stack、queue、priority_queue 全面拆解

这篇文章主要介绍了C++中的容器适配器及其底层实现原理。主要内容包括: 容器适配器概念:通过封装现有容器,提供特定接口(如栈的LIFO、队列的FIFO特性),是一种设计模式。 三种标准适配器: stack:默认基于deque实现 queue:默认基于deque实现 priority_queue:默认基于vector实现(大根堆) deque详解: 分块存储+指针表的结构 优缺点分析:头尾操作高效但遍历性能较差 作为stack/queue默认容器的原因 stack模拟实现:展示如何基于现有容器封装适配器接口

2025-10-13 16:54:32 574 47

原创 万字长文带你从0到实战,全面吃透八大排序算法

从底层到实战,图文并茂详解八大排序算法

2025-10-10 19:02:45 790 28

原创 二叉树实战笔记:结构、遍历、接口与 OJ 实战

本文聚焦 “二叉树实战”,系统覆盖从基础到应用全流程。先铺垫树的基础概念(节点度、层次等)及特殊二叉树(满、完全二叉树)特性;再用 C++ 模板实现二叉树节点结构体与类,手搓1-2-3/4-5-6示例树,展示内存组织逻辑。核心解析遍历技术:前中后序递归遍历(根左右 / 左根右 / 左右根)的 “递 - 归” 思想,及层序遍历的队列应用;实战含 LeetCode 题解(单值、相同树、对称树、子树)与常用接口(最大深度、节点总数、k 层节点数、值查找)。

2025-10-05 21:01:27 1306 46

原创 从堆到TopK:一文吃透核心原理与实战应用

本文系统介绍了树和堆的数据结构及其核心原理。主要内容包括:1)树的基本概念与术语,如节点度、层次、深度等;2)二叉树的定义与特殊类型(满二叉树、完全二叉树);3)堆的本质是完全二叉树,分为大顶堆和小顶堆;4)堆的底层实现依赖动态数组和两个核心操作:向上调整(用于插入元素)和向下调整(用于删除堆顶),通过索引关系高效维护堆结构;5)介绍了两种建堆方法的时间复杂度差异。文章通过图示和代码示例详细说明了堆的调整过程,为理解优先队列等高级数据结构奠定了基础。

2025-10-04 20:03:43 1262 29

原创 从直线到环形:解锁栈、队列背后的空间与效率平衡术

本文介绍了两种经典数据结构——栈和队列的底层实现与特性。栈采用后进先出(LIFO)原则,可通过动态数组或链表实现,支持压栈、出栈等高效操作,常用于函数调用、撤销操作等场景。队列遵循先进先出(FIFO)原则,但数组实现会面临"假溢出"问题。为此,文中提出循环队列的解决方案,通过首尾相连提高空间利用率。文章通过C++代码展示了栈和队列的具体实现,并探讨了它们在实际应用中的价值,体现了数据结构从简单到优化的演进过程。

2025-10-02 18:28:58 959 28

原创 list 迭代器:C++ 容器封装的 “行为统一” 艺术

在C++标准库中,std::list是双向链表的容器,我们日常用就能方便地插入删除,但它的底层实现究竟是什么样的?尤其是迭代器(iterator),为什么it!=lst.end();++it)可以统一操作链表?今天,我基于一个精简版mini_list的实现,重点解析迭代器封装的底层思想,带大家从零实现并理解list容器。在mini_list中,通过实例化public:// 可写迭代器:ref=T&,ptr=T*// 只读迭代器:ref=const T&,ptr=const T*// ...

2025-09-25 11:50:26 2220 40

原创 深度剖析 vector 底层原理:从手写实现到核心技术点全解析

在C++标准模板库(STL)中,vector是最常用的容器之一,它以动态数组的形式存在,兼顾了数组的随机访问效率和动态扩容的灵活性。很多开发者日常使用vector时,往往只关注其表层接口,却对其底层实现原理一知半解。本文将通过手写一个简化版vectormy_vector),深入剖析vector的底层机制,重点讲解内存管理、深浅拷贝、迭代器失效、构造函数设计、交换机制等核心技术点,和大家交流我的一些理解。核心结构:以_start(内存起始)、_finish(元素末尾)、(容量末尾)三个指针为基础,

2025-09-21 14:43:29 1230 31

原创 揭秘整数内存密码:从原码到补码,读懂计算机 “数字语言”

在C/C++语言中,有很多种类型,而整型是用的最多的int num;// 声明一个整型变量// 声明并初始化一个变量// 先声明一个变量 再赋值int exm;// 声明一个变量,它的值是随机的exm = 10;// 给这个变量赋值上面这两行代码和的作用是一样的,但是赋值和初始化是两个不同的操作,赋值是给已经存在的变量进行操作,初始化是在变量定义时进行操作int x = -1;return 0;对于变量x = -1在内存中,-1当用%u。

2025-09-13 21:58:10 974 28

原创 进制间的转换

假如说一个十六进制数为0x3F,将其转换为十进制,此时的权重基础是16的几次方了。二进制有个缺点就是表示起来数据过于冗长,而十六进制就能缩短数据表示,更为简洁。不断除以16找到余数,直到除到0为止,从下到上是高位到低位的顺序。不断除以2找到余数,直到除到0为止,从下到上是高位到低位的顺序。八进制数在计算机科学中并不常用,转换方法同上,就不再赘述了。八进制数在计算机科学中并不常用,转换方法同上,就不再赘述了。这六个数,为了和其他进制区分,以0x开头,例如。组成,为了和其他进制区分,以。

2025-09-13 10:38:25 803 19

原创 从零实现一个简化版string 类 —— 深入理解std::string的底层设计

说明:本文聚焦 的实现细节与设计理由,代码使用一个教学用的 ,并配有完整实现与测试用例。不讲 API 用法,而是解释“为什么要这么实现”。在 C++ 开发中, 就像“空气”一样无处不在:拼接日志、处理配置、解析数据…… 我们随手就能写 、,却很少追问为什么这些操作有特定的性能特征。本文不讲“如何用 string”,而讲为什么要这样设计 string。我们用教学版 来逐步展示 的核心实现思想:内存布局、扩容策略、拷贝/移动语义、迭代器规则等。读完你应当能回答:为什么 在大多数情况下是 O(1)?为什么

2025-09-10 22:48:46 1193 22

原创 链表相关OJ题

思路:创建一个哨兵位指向head,创建一个cur临时指针,遍历链表,遇到等于val的节点跳过即可,最后返回即链表的头节点创建一个哨兵位就避免了讨论head是否为空。

2025-09-01 20:35:54 1269 19

原创 链表漫游指南:C++ 指针操作的艺术与实践

上一章的顺序表底层是数组,封装了增删查改的功能接口成为了顺序表。存储顺序表的空间是连续的,顺序表非常大时,内存可能无法提供这么大的连续空间,由此,链表就被创造了。在一个复杂的系统中,空闲的内存空间散落在内存各处,而链表通过指针很好的链接起了各个分散的内存空间。如图:内存空间分配并不连续,但是指针称为维系各个空间的桥梁。

2025-08-23 13:35:07 1472 21

原创 从零实现自定义顺序表:万字详解 + 完整源码 + 图文分析

刚入门C++数据结构的你,是不是也遇到过这些头疼的问题?想实现一个能灵活存数据的顺序表,却卡在类结构设计上,不知道该用哪些成员变量;好不容易写了插入、删除接口,却总出现数组越界、数据覆盖的 bug;甚至还没搞懂动态扩容的原理,程序就因为内存泄漏崩溃了……

2025-08-20 12:39:07 1090 16

原创 复杂度分析

时间复杂度分析统计的不是算法运行的时间,运行时间和平台环境也有着很大的关系,这个不是我们能控制的,所以,我们。还有个有趣的知识,假设中国十四亿人口,每个人的省份证号按序排列,找一个人最多需要找多少次?常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶。和指数阶相反,对数阶反映“每轮缩减到一半”。平方阶通常出现在嵌套循环中,内外层循环都为。,函数运行时所要的栈帧空间在编译期间已经确定好了,因此。,我们举个例子看一下,假设输入数据大小为。,每轮缩减到原来的一般,循环次数是。

2025-08-19 11:31:20 850 8

原创 初识C++模板

函数模板代表了一个函数家族,函数模板和类型无关,在使用时被参数化,根据实参类型产生特定类型的函数template<typename T1, typename T2,...> 返回值类型 函数名(参数列表){}typename是定义模板参数的关键字// 函数模板template<class T1, class T2,...> class 类模板名{};// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0)

2025-08-17 11:57:26 466 10

空空如也

空空如也

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

TA关注的人

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