自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++11新特性全面解析(二):线程库+异常体系

本文摘要:本文系统介绍了C++11中的线程库和异常处理机制。线程库部分详细讲解了thread类的使用、线程函数参数传递、原子操作库(atomic)、互斥锁(mutex)和条件变量的应用。异常处理部分对比了C语言传统错误处理方式的缺陷,阐述了C++异常的概念、使用方法和安全规范,包括异常抛出与匹配规则、自定义异常体系设计等。文章通过代码示例展示了多线程编程中常见的竞争条件和资源管理问题,以及异常处理的最佳实践。最后分析了异常机制的优缺点,指出虽然存在执行流混乱等问题,但在现代编程中仍利大于弊,是错误处理的重要

2025-12-04 22:32:41 544

原创 C++11新特性全面解析(一)

C++11新特性摘要 C++11标准带来了140多项新特性,主要包括: 列表初始化:统一了内置类型和自定义类型的初始化方式,支持更简洁的初始化语法。 类型推导:auto和decltype关键字简化了复杂类型的声明。 右值引用:引入移动语义,通过移动构造和移动赋值减少不必要的拷贝,提升性能。 智能指针:unique_ptr、shared_ptr等帮助管理内存资源。 lambda表达式:提供匿名函数的简洁写法,支持闭包特性。 容器增强:新增array、forward_list等容器,改进unordered系列容

2025-12-03 12:08:10 711

原创 递归算法精讲:从汉诺塔到反转链表

本文讲解了递归算法的原理与应用,通过多个经典题目展示递归实现方法:1. 汉诺塔问题通过分治思想,将问题分解为移动n-1个盘子和最大盘子两个子问题;2. 合并有序链表通过比较节点值确定头节点,递归处理剩余部分;3. 反转链表采用后序遍历思维;4. 两两交换节点通过递归处理剩余链表;5. 快速幂利用分治思想降低复杂度。文章强调递归与循环的等价关系,指出递归本质是深度优先搜索,当问题呈现重复子结构时适用递归,并需明确递归出口和函数体的定义逻辑。

2025-11-16 21:00:00 1019

原创 递归与搜索:编程中的思维艺术

摘要:递归是函数自我调用的编程技巧,适用于分解为相同子问题的情况,如二叉树遍历。搜索是暴力枚举的递归实现,分为深度优先(DFS)和广度优先(BFS)。回溯本质上是DFS的一部分,用于退回错误路径。DFS常配合剪枝优化,跳过无效路径。理解递归需从宏观把握,将函数视为黑盒完成特定任务,不必纠结具体调用过程。

2025-11-16 18:00:00 765

原创 高并发内存池:从tcmalloc到实战

本文摘要:该项目基于Google开源项目tcmalloc,实现了一个高效的多线程内存池系统。内存池通过预申请大量内存资源并统一管理,解决了传统malloc/free存在的效率低下和内存碎片问题。文章详细介绍了内存池的工作原理,包括其作为程序与操作系统间的"内存中介"角色,以及如何通过brk和mmap系统调用管理内存分配。同时对比了不同内存分配器(如ptmalloc、jemalloc)的特点,分析了malloc底层实现涉及的缺页中断机制。该项目综合运用了C++、数据结构、操作系统内存管理等

2025-11-12 17:00:00 708

原创 分治-归并:高效解决逆序对问题

本文探讨了分治算法在排序和统计问题中的应用。通过归并排序和快速排序的对比,阐述了两种分治策略的区别:快速排序在分治过程中边分边解决问题,而归并排序则是先分治后合并解决。文章详细讲解了四道LeetCode题目的分治解法:912题复习归并排序,170题统计逆序对,315题计算右侧较小元素,493题处理翻转对。特别强调了493题中比较条件变化带来的处理差异,需要先统计再排序。最后总结指出,当问题可拆分为独立解决的子问题或可通过分区缩小规模时,分治算法是优先考虑方案。

2025-11-02 20:07:43 858

原创 分治思想之快排优化:三分区防退化与剪枝降复杂度

本文摘要:文章系统讲解分治算法在排序问题中的应用,重点分析快速排序的优化策略。通过LeetCode例题(75、912、215、面试题17.14)演示:1)传统快排通过三分区(<key/=key/>key)避免重复元素导致的时间复杂度退化;2)TopK问题采用剪枝策略,仅递归目标区间实现O(n)时间复杂度;3)关键实现包括随机基准选择(rand()%(r-l+1)+l)和三指针分区逻辑。相比简单二分区,三分区能高效处理重复元素,是解决LeetCode超时问题的核心技巧。

2025-11-02 19:00:00 535

原创 排序算法:高效数据处理的核心

本文系统介绍了7种经典排序算法,包括冒泡排序、选择排序(直接/堆)、插入排序(直接/希尔)、快速排序、归并排序等。重点讲解了每种算法的核心思想、实现原理和代码示例,分析了时间复杂度、空间复杂度和稳定性。其中快速排序综合性能最佳,平均O(nlogn)且常数因子小;归并排序稳定但需额外空间;堆排序适合空间受限场景;简单排序适用于极小数据量。文章特别强调快速排序通过三数取中避免退化,并对比了不同算法的适用场景,指出实际开发中快速排序应用最广,而归并排序适用于要求稳定性的场景。

2025-10-31 20:00:00 821

原创 轻松掌握模拟算法:从题目到代码

本文总结了模拟算法的解题思路和典型例题。模拟算法的核心是严格遵循题目要求,将描述过程直接转换为代码实现。文章通过LeetCode 1576、495、6、38、1419等例题,展示了不同场景下的模拟方法:包括字符替换、时间计算、Z字排列、字符串生成和状态跟踪等。对于复杂度较高的问题(如Z字变换),可以通过寻找数学规律来优化实现。模拟算法的关键在于仔细处理边界条件,确保代码正确还原题目描述的逻辑流程。解题时应先在纸上梳理清楚算法步骤,再转化为代码。

2025-10-31 18:00:00 1492

原创 位运算全解析:从入门到精通

本文系统介绍了位运算的基础知识、常见题型及其应用场景。主要内容包括:1)基本位运算操作(与、或、异或、位移、取反)的定义和记忆方法;2)六类典型位运算问题(位图操作、lowbit提取等)及其解题思路;3)LeetCode经典例题解析(如136、137、268等题),展示如何利用异或特性解决唯一出现/次数统计问题;4)位运算在算法优化中的优势,特别适合处理需要高效空间/时间复杂度的场景。文章强调位运算在状态表示、特征判断等方面的底层优势,是处理大规模数据的重要工具。

2025-10-28 18:00:00 985

原创 二分查找:二段性的秘密与实战技巧

本文系统讲解了二分查找算法的原理与应用,重点强调了二分查找的核心在于利用数组的"二段性"而非单纯的有序性。文章通过LeetCode 704、34、69、35、852、162、153等经典例题,详细分析了三种二分模板的实现细节:1)朴素二分查找;2)寻找区间左端点;3)寻找区间右端点。特别指出算法实现中的关键细节:循环条件的选择(left<=right或left<right)、中点计算的防溢出处理(left+(right-left)/2)、边界条件的特殊处理等。通过山峰数组、旋

2025-10-25 17:42:15 1020

原创 前缀和算法:高效解决区间和问题

文章摘要: 前缀和是一种高效的数组预处理算法,通过预先计算累加和将区间查询优化至O(1)时间。核心思想是"空间换时间",适用于一维/二维数组的区间和、子数组等问题。文章详解了前缀和的实现原理、边界处理技巧(如辅助空间和下标映射),并通过LeetCode 724(中心下标)、238(除自身乘积)、560(和为K子数组)、974(可被子数组)、525(01等长子数组)、1314(矩阵区域和)等例题,对比了暴力解与前缀和解法的效率差异,强调哈希表优化和动态滚动数组的应用。特别指出负数取模修正和

2025-10-25 17:41:28 1084

原创 栈与队列:数据结构中的双雄对决

本文介绍了栈和队列两种基础数据结构。栈遵循后进先出(LIFO)原则,可通过数组或链表实现,适用于浏览器历史记录、深度优先搜索等场景。队列遵循先进先出(FIFO)原则,通常用链表实现更高效,应用于进程调度、消息队列等场景。文章详细讲解了两种数据结构的实现方法,包括动态扩容、伪删除等技术细节,并提供了相关LeetCode例题。最后扩展介绍了环形队列的设计原理及其通过空间复用优化数组队列效率的特点。

2025-10-21 21:38:12 1051

原创 线性表实战:顺序表与链表的奥秘

本文介绍了线性表的两种主要实现方式:顺序表和链表。顺序表采用连续存储空间,支持随机访问但增容成本高;链表通过指针连接节点,插入删除高效但无法随机访问。详细讲解了动态顺序表和单链表的C语言实现,包括初始化、增删查改等操作。特别分析了带头双向循环链表的优势,并对比了两者的时间复杂度、CPU缓存命中率等特性。顺序表适合频繁随机访问场景,链表则更适合频繁插入删除操作。文章还提供了相关面试题和实现注意事项,为理解和应用线性表提供了全面指导。

2025-10-20 22:32:37 849

原创 揭秘Redis底层协议RESP:高效通信的秘密(redis-plus-plus API接口的使用)

【150字摘要】本文介绍了开发自定义客户端(如QQ、Redis等)需要了解其应用层协议,Redis使用RESP协议实现简单高效的通信。重点讲解了redis-plus-plus库的使用方法,包括set、get、exists等命令的参数设计和返回值处理(如OptionalString类型)。文章还比较了不同命令的参数形式,如输出迭代器与容器的选择,以及时间参数的两种表示方式。最后强调通过实践掌握常用命令,遇到不熟悉的命令可查阅文档。

2025-10-20 19:43:19 1157

原创 滑动窗口:双指针的高效应用

滑动窗口算法是双指针的一种具体应用,主要用于解决数组/字符串子区间问题。其核心思想是通过维护一个动态变化的窗口(由左右指针界定),将暴力解法的O(n²)时间复杂度优化到O(n)。窗口通过右指针扩大、左指针缩小来动态调整,满足特定条件(如和、计数、匹配等)。典型应用包括求最短子数组(LeetCode 209)、最长无重复子串(LeetCode 3)、最多翻转k个0(LeetCode 1004)等问题。该算法的关键在于利用单调性或特定条件(如正数数组的和递增)避免无效枚举,通过同向移动指针实现高效求解。

2025-10-19 14:49:51 693

原创 双指针算法:高效解决问题的利器

双指针算法是一种高效的编程技巧,通过在数组或链表中使用两个指针协同工作来优化时间复杂度。主要分为三种应用模式:相向指针(如两数之和)、同向指针(如滑动窗口)和分离指针(如合并有序数组)。该算法能将O(n²)暴力解法优化为O(n),尤其适合处理有序数据。典型应用包括283题移动零、15题三数之和、11题盛水容器等。关键是根据题目特性选择指针移动规则,确保每个元素只被访问一次,同时兼顾空间效率。判断是否使用双指针的步骤为:分析暴力解法复杂度、检查数据单调性、排除更优解法。

2025-10-15 16:10:39 609

原创 算法效率:时间与空间的较量

算法效率分析主要包括时间复杂度和空间复杂度。时间复杂度衡量算法运行速度,用大O表示法估算执行次数,通常关注最坏情况;空间复杂度衡量算法临时占用存储空间大小。随着计算机存储容量提升,空间复杂度关注度降低。时间复杂度的计算规则是:保留最高阶项并去除系数。空间复杂度也采用类似的大O渐进表示法,主要计算运行期间申请的额外空间。实际应用中,我们更关注算法的时间性能,特别是最坏情况下的表现。

2025-10-14 20:56:22 628

原创 数据结构与算法简介:充分理解二者关系

本文系统性地阐述了数据结构与算法的核心概念及其相互关系。数据结构作为计算机存储和组织数据的方式,主要包括线性结构(数组、链表、栈、队列)、树形结构(二叉树、堆)、图形结构和集合结构,其核心价值在于解决数据操作的效率问题。算法则是定义良好的计算过程,通过输入产生输出,具有输入、输出、有穷性、确定性和可行性五大特征。二者相辅相成:数据结构是算法的载体,算法是数据结构的灵魂。文章通过丰富的面试题示例和实际应用场景,深入分析了不同数据结构的特点及适用场景,并强调算法设计需结合具体数据结构特性进行优化。最后指出,掌握

2025-10-13 22:27:48 704

原创 Redis渐进式遍历:安全高效的键扫描术

摘要: Redis的SCAN命令通过渐进式遍历解决KEYS命令一次性获取所有key导致的服务器阻塞问题,每次只获取少量key,需多次执行完成全遍历。SCAN支持模式匹配、数量限制和键类型筛选,但遍历期间数据变更可能导致重复或遗漏。Redis默认提供16个隔离数据库(0-15),通常只使用0号库。重要提醒:FLUSHDB和FLUSHALL会删除数据,生产环境慎用,其中FLUSHALL会清除所有数据库内容。SCAN虽优于KEYS,仍需注意使用场景和潜在风险。

2025-10-12 21:18:36 440

原创 揭秘Redis五大不常用数据类型

Redis提供了五种高级数据类型:Streams(流式数据处理,支持持久化与多消费者)、Geospatial(地理空间坐标存储与查询)、HyperLogLog(基数统计,超低内存消耗)、Bitmaps(位图集合,节省空间)和Bitfields(精细位操作)。这些类型分别针对消息队列、地理位置、UV统计、整数集合和位操作等场景,在保证功能性的同时优化内存使用效率。其中Streams和HyperLogLog最具特色,前者实现了完整消息队列功能,后者仅用12KB内存即可统计上亿数据的基数,虽有0.81%误差但大幅

2025-10-12 20:40:47 575

原创 Redis5安装与核心命令详解

Redis是一个高性能的键值存储系统,支持多种数据结构。本文首先介绍了Redis5的安装配置方法,包括修改配置文件、启动服务等步骤。然后详细讲解了Redis的各种命令操作,包括全局命令和针对不同数据结构的专门命令。 Redis支持五种主要数据结构:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Zset)。每种数据结构都有其特定的命令集,如String的set/get命令、Hash的hset/hget命令、List的lpush/lrange命令等。文章还介绍了每种数据结

2025-10-12 17:23:50 598

原创 Redis:高性能内存数据库的六大核心优势

Redis是一个高性能的内存数据库,支持键值对存储和多种数据结构。它具有可编程性,支持Lua脚本实现原子操作;可扩展性,允许开发者自定义功能;持久化机制确保数据安全;集群功能实现水平扩展;高可用性通过复制和故障转移保障服务稳定。Redis采用单线程模型处理核心操作,避免了多线程竞争,加上内存操作和高效的数据结构,使其性能卓越。这些特性使其在分布式系统中广泛应用。

2025-09-29 23:09:34 1065 4

原创 Redis核心应用:从单机到分布式架构解析

Redis是一个开源的内存数据结构服务器,主要用于分布式系统中的数据库、缓存和消息队列。相比单机架构直接使用变量存储数据,Redis通过基于网络的进程间通信解决了分布式环境下的内存共享问题。Redis具有超高读写性能但存储容量有限,常与MySQL结合使用,MySQL负责数据持久化和复杂查询,Redis处理高频访问数据。随着系统规模扩大,通过负载均衡、读写分离、引入缓存和分库分表等方式提升性能,但架构复杂度也随之增加。Redis在分布式系统中发挥着数据缓存和共享的关键作用,是构建高并发应用的重要组件。

2025-09-29 13:15:21 581

原创 Docker镜像与容器:轻松理解与实战

Docker容器技术通过镜像打包应用及其依赖环境,实现快速部署和运行。镜像作为模板,实例化后成为容器,提供隔离的运行环境,解决环境不一致问题。Docker通过数据卷实现持久化存储,支持网络隔离和容器间通信。Dockerfile定义镜像构建步骤,Docker Compose简化多容器管理。关键命令包括:docker run(创建容器)、docker ps(查看容器)、docker build(构建镜像)。技术优势包括环境隔离、一致性保证和资源高效利用。

2025-09-27 21:09:47 636

原创 JsonCpp:高效序列化与反序列化指南

本文介绍了JSON数据格式及其在JsonCpp库中的实现。JSON包含对象、数组、字符串和数字等数据类型,通过键值对形式组织数据。JsonCpp库通过Value类提供了便捷的数据访问和操作方法,支持类型转换和数组操作。 重点解析了JsonCpp的序列化和反序列化接口设计,采用工厂模式实现多态扩展:1) 通过抽象基类定义接口规范;2) 使用嵌套工厂类实现具体方案;3) 通过虚函数重写实现多态。这种设计避免了代码臃肿,符合开闭原则,便于新增处理方案而不修改原有代码。 最后说明官方提供的序列化和反序列化配置方案已

2025-09-18 21:42:32 886

原创 Git版本控制完全指南

Git是一款分布式版本控制系统,由Linus Torvalds开发,用于代码版本管理和多人协作开发。与集中式版本控制系统不同,Git的每个用户都拥有完整的版本库,支持离线工作。本文介绍了Git的安装配置、本地仓库操作(包括初始化、提交、版本回退等)、分支管理(创建、合并、解决冲突)以及远程仓库的使用(SSH配置、推送拉取代码等)。重点讲解了Git工作流程中的工作区、暂存区和本地仓库的概念,以及如何通过.gitignore文件忽略特定文件。文章还提供了Gitee远程仓库的搭建和关联方法,帮助开发者实现代码的远

2025-09-15 13:20:57 982

原创 Socket编程入门:从IP到端口全解析

本文介绍了网络编程的基础知识,重点讲解了TCP/UDP协议、socket编程接口以及实现简单UDP客户端/服务器的方法。主要内容包括:1. 网络基础概念:IP地址、端口号、网络字节序,以及TCP/UDP协议的特点和适用场景;2. socket编程接口详解:sockaddr结构体、常见API如socket()和bind()的使用方法;3. UDP网络程序实现:服务端和客户端的完整代码示例,包括数据收发、地址转换等关键操作;4. 网络调试工具:ifconfig和netstat命令的使用说明。文章通过"

2025-07-24 23:18:23 1150

原创 计算机网络基础:从协议到通信全解析(大致框架)

本文系统介绍了计算机网络的基础知识,主要包括:1. 计算机网络发展背景及局域网/广域网概念;2. 网络协议的分层模型(OSI七层和TCP/IP五层);3. 数据传输过程中的封装与解包机制;4. MAC地址和IP地址的作用与区别。重点阐述了协议分层的必要性、各层功能特点,以及数据在网络中的传输过程,包括报头封装、路径选择等关键环节,为理解网络通信原理提供了系统框架。

2025-07-18 12:01:02 1038

原创 C++哈希表:冲突解决与高效查找

本文系统讲解了哈希表及其相关技术。首先介绍了哈希表的两种底层实现方式:闭散列(开放定址法)和开散列(链地址法),重点分析了它们的冲突处理机制,包括线性探测、二次探测和哈希桶设计。然后详细阐述了位图和布隆过滤器原理,说明位图适用于海量数据判重,而布隆过滤器通过多哈希函数降低误判率。文章还提供了哈希表的完整实现代码,包括迭代器设计、哈希函数优化等关键技术点。最后讨论了哈希在分布式系统中的应用,如一致性哈希解决节点动态变化问题。全文结合理论分析和实际应用,为理解哈希技术提供了全面的视角。

2025-06-02 15:37:10 927

原创 C++哈希表:unordered系列容器详解

C++中的unordered系列容器(unordered_map/unordered_set)采用哈希表实现,相比红黑树结构的map/set具有O(1)的查询效率,但元素无序。二者功能相似但底层实现不同:红黑树保持有序(logN时间复杂度),哈希表提供更快访问(O(1)平均复杂度)。unordered容器支持基本操作如insert/erase/[]访问,但迭代器为单向。适用于需要快速查找但对元素顺序无要求的场景,与有序容器形成互补选择。

2025-05-31 17:49:31 703

原创 深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)

本文系统梳理了树形数据结构及其应用,涵盖以下核心内容: 基础概念与分类 详细解析树的基本术语(根节点、叶节点、度等)及存储结构(双亲/孩子表示法) 特殊二叉树类型(满二叉树、完全二叉树)及其数学特性 核心数据结构实现 堆的构建与操作(Floyd建堆算法O(n) vs插入法O(nlogn)) 二叉搜索树的插入/删除策略(含替换法处理双子树情况) AVL树的平衡机制(四种旋转场景及平衡因子维护) 高级树结构 红黑树的五条性质与颜色调整规则(三类uncle情况处理) 对比AVL与红黑树的性能差异(旋转次数与平衡严

2025-05-30 22:15:51 1228 1

原创 STL的map和set(关联式容器深度解析)

本文介绍了C++中的关联式容器map、set及其多键值版本multimap、multiset。关联式容器通过键(key)存储元素,底层使用红黑树实现,保持元素有序性。重点讲解了set(存储唯一值)、map(存储键值对)的构造方法、插入删除操作,以及map特有的[]运算符实现原理。对比了set/map与multiset/multimap的区别,指出后者允许键重复但不支持[]操作。文章还简要提及了底层红黑树结构,强调关联式容器在查找效率(O(logn))和有序性方面的优势。

2025-05-25 20:00:22 729

原创 c++之多态(揭秘多态:面向对象编程的核心魅力)

本文系统讲解了面向对象编程中的多态概念及其实现机制。主要内容包括:1.多态的概念与定义("一个接口,多种实现");2.多态的实现条件(基类指针/引用调用+虚函数重写);3.虚函数表的工作原理(vptr指向虚函数地址数组);4.继承关系中的虚函数表现(单继承和多继承差异);5.抽象类与接口继承(纯虚函数强制派生类实现);6.多态相关面试问题解析(内联函数、静态函数限制等)。文章通过售票系统等实例,详细阐述了多态在编译期和运行期的绑定机制,以及虚函数表在动态绑定中的关键作用。

2025-05-24 13:06:18 883

原创 c++之继承(深入解析C++继承机制与代码复用技巧)

本节主要探讨了面向对象编程中的继承机制及其相关概念。首先介绍了继承的基本定义,即允许派生类复用基类的特性并扩展功能,从而减少代码冗余。接着详细讲解了基类与派生类之间的对象赋值转换、作用域规则、派生类的默认成员函数、继承与友元及静态成员的关系。特别强调了复杂的菱形继承及其带来的数据冗余和二义性问题,并提出了通过虚继承来解决这些问题的方法。最后,对比了继承与组合的优缺点,建议在实际开发中优先使用组合以降低类之间的耦合度,提高代码的可维护性。本节还通过学生管理系统的例子,展示了如何通过继承来优化类设计,减少重复代

2025-05-23 19:14:41 1378

原创 C++之模板进阶(探索C++模板:非类型参数与特化技巧)

本节主要介绍了C++模板编程中的几个关键概念:非类型模板参数、类模板的特化、模板特化的应用(如类型萃取)以及模板的分离编译。非类型模板参数允许使用常量作为模板参数,适用于需要固定大小的场景,如静态数组。类模板的特化分为全特化和偏特化,全特化针对特定类型提供特殊实现,而偏特化则对模板参数进行进一步限制。模板的分离编译问题指出,模板的声明和定义通常需要放在同一文件中,以避免链接错误。模板编程虽然提高了代码的复用性和灵活性,但也可能导致代码膨胀和编译时间增加。

2025-05-21 23:13:20 1418

原创 STL之priority_queue(揭秘C++优先队列:高效管理数据优先级)

优先队列(priority_queue)是一种容器适配器,遵循严格弱序原则,确保队列顶部始终为最大元素,类似于堆结构。它通过封装底层容器(如vector或deque)实现,支持插入和删除操作,并自动维护堆性质。优先队列默认使用less仿函数实现大堆,但可通过greater仿函数改为小堆。仿函数通过重载operator()实现类对象像函数一样调用。优先队列不支持迭代器遍历,但底层容器支持。其核心功能包括top()返回堆顶元素和pop()删除堆顶元素,适用于需要高效维护元素优先级的场景。

2025-05-21 21:15:08 1038

原创 STL之stack&&queue

1.栈是没有迭代器的,因为栈的特性是先进后出,不能随便访问,所以不支持迭代器2.如何遍历?先判断为不为空,不为就取栈顶的数据,取完之后pop就行3.为什么没有析构函数?因为它底层是别的容器,当stack出了作用域自动销毁时会调底层容器的析构函数1.队列是一种容器适配器,专门用于在FIFO(先进先出)中操作,其中从容器的一段插入元素,另一端提取元素2.队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素,元素从队尾入队列,从对头出队列。

2025-05-06 21:30:36 1194

原创 STL之list容器

1.list的底层是双向链表结构,双向链表中的每个元素在互不相关的独立结点中,在结点中通过指针指向前一个元素和后一个元素2.list是可以在常数范围内在任意位置的插入和删除的序列式容器,并且该容器可以前后双向迭代3.vector的优点:支持随机访问,间接的就支持了排序/二分查找/堆排序等缺点:1.头部和中部的插入效率低,需要挪动数据2.插入数据空间不够需要增容,增容需要开新空间,拷贝数据,释放旧空间list的优点:没有增容代价,且任意位置插入都是0(1);

2025-05-03 12:25:01 1560

原创 STL之vector容器

1.vector是可变大小数组的容器2.像数组一样,采用连续的空间存储,也就意味着可以通过下标去访问,但它的大小可以动态改变3.每次的插入都要开空间吗?开空间就要意味着先开临时空间,然后在拷贝旧的到新的上面,在释放原来的,就时间而言,这是一个相对代价很高的任务;显然这是不行的,vector的分配策略:会分配一些而外的空间以适应可能的增长,例如我们平时说的以1.5或者2倍的方式增容,不同的库选择不同的策略权衡空间的使用和重新分配,以至于在插入一个元素时能在常数时间内插入;

2025-05-02 13:41:05 1346

空空如也

空空如也

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

TA关注的人

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