容器适配器
代码仓库shanchuann/CPP-Learninng 容器适配器是C++标准模板库(STL)中的接口封装型容器组件,并非具备独立存储结构的底层容器,其核心机制是依托deque、vector、list等基础序列容器作为底层存储载体,通过封装与约束底层容器的开放接口,实现栈、队列、优先队列三类经典数据结构的专属存取逻辑,屏蔽底层容器的复杂实现细节,仅对外提供适配特定应用场景的标准化操作接口。该类组件聚焦固定存取规则的场景化应用,使用者无需关注底层容器的实现原理,仅需调用封装后的接口即可完成数据操作,具备较高的易用性与场景针对性。 STL标准库提供三类标准化容器适配器,分别对应不同的存取约束规则:stack适配后进先出(Last In First Out, LIFO)的栈结构,queue适配先进先出(First In First Out, FIFO)的普通队列结构,priority_queue适配基于优先级排序的优先队列结构。三类适配器均不具备独立数据存储能力,完全依赖底层序列容器完成数据的实际存储,自身仅承担存取规则约束与接口封装的功能。 栈(stack)stack...
无序容器
代码仓库shanchuann/CPP-Learninng 引言在C++标准模板库(STL)中,关联容器分为有序与无序两大类,无序关联容器依托哈希表实现,主打快速的查找、插入与删除操作,和有序关联容器(map、set)的关键差异在于不维护元素的排序规则,存储顺序由哈希函数决定。这类容器适配大量需要高效存取、不关注元素顺序的业务场景,也是哈希表思想在工程实践中的典型落地应用,和此前讲解的链式哈希底层逻辑高度契合,理解无序容器能更好地串联哈希表理论与STL实际使用。 无序容器基础认知容器分类与底层逻辑STL提供四类无序关联容器,均基于哈希表搭建,依靠哈希函数完成键到存储位置的映射,通过链地址法解决哈希冲突,和手动实现的链式哈希原理完全一致,四类容器分工明确,适配不同存储需求: unordered_map:存储键值对,键唯一不重复,支持键值映射与快速查找 unordered_multimap:存储键值对,键允许重复,适配一对多的映射场景 unordered_set:存储单一元素,元素唯一不重复,主打元素存在性校验 unordered_multiset:存储单一元素,元素允...
链式哈希
代码仓库shanchuann/CPP-Learninng 引言哈希表作为经典的散列类存储数据结构,通过哈希函数完成关键字与存储地址的直接映射,可在平均时间复杂度下实现常数级的查找、插入与删除操作,在分布式缓存、数据库索引、键值存储系统等工程领域具备广泛应用价值。哈希冲突是哈希表设计中不可规避的关键技术问题,链地址法(又称链式哈希)作为解决哈希冲突的主流方案,其主要设计思路为将哈希映射结果一致的关键字以单链表结构串联,使每个哈希桶位对应一条独立链表,以此规避开放寻址法存在的寻址堆积、空间利用率低等缺陷。本文基于标准C语言实现的链式哈希完整源码,系统阐述链式哈希的基础理论原理,对源码的数据结构定义、基础工具函数、操作逻辑、动态扩容机制及内存管理方案进行逐模块、逐流程的详尽解析,同时梳理工程实现中的边界条件处理与性能优化思路,为哈希表的工程化落地与底层原理学习提供完整参考。 链式哈希基础理论哈希表与哈希冲突哈希表依托哈希函数,将输入关键字Key映射至预设范围内的离散哈希地址,实现关键字与存储位置的直接关联,理想状态下可达到O(1)时间复杂度的高效存取。但受哈希函数离散性能...
一致性哈希
代码仓库shanchuann/CPP-Learninng 引言在分布式缓存、分布式存储、负载均衡等典型分布式系统场景中,服务集群的动态扩容与缩容是常态化运维操作。此类场景的核心诉求为:节点拓扑结构变更时,最大限度降低数据与节点映射关系的变动幅度,规避缓存大规模失效、数据重复调度及流量雪崩等问题,保障系统持续稳定运行与高可用特性。传统哈希取模算法作为基础节点路由方案,在动态集群场景下易引发集群稳定性故障,这也是一致性哈希算法提出的重要动因。本文从传统路由算法的固有缺陷切入,系统阐释一致性哈希算法的工作原理、主流优化策略与可工程化实现的代码逻辑,补充实际落地细节,全面覆盖该算法的理论体系与实践应用维度。 传统哈希取模哈希取模算法是传统分布式节点路由的常用实现方案,其运算公式为:hash(key) % nodes_count,式中key表征数据或请求的唯一标识,nodes_count表征集群总节点数量。该算法具备逻辑简洁、部署成本低的优势,但在节点动态变更的实际应用场景中,存在难以规避的固有缺陷,具体表现如下: 全局映射关系失效:集群新增或移除单个节点时,总节点数nod...
有序关联容器
本文对比了deque与list的迭代器稳定性与效率,解析了基于红黑树的有序关联容器特性,并介绍了std::pair在键值对存储中的核心作用。
标准模板库list
本文详解C++ STL list容器,基于双向链表实现,核心优势是任意位置O(1)的插入删除。文章从底层节点结构到接口实操,全面剖析其特性与应用场景。
标准模板库deque
代码仓库shanchuann/CPP-Learninng 在C++ STL的序列容器家族中,vector凭借极致的随机访问性能成为了绝大多数场景的首选,但它有一个致命短板:头部插入与删除操作的时间复杂度为O(n),在需要频繁双端操作的场景下效率极低。而deque(double-ended queue,双端队列)正是为解决这个问题而生的容器,它既保留了vector的随机访问能力,又实现了头尾两端O(1)时间复杂度的增删操作,是STL中平衡性能与灵活性的经典设计,也是很多开发者容易忽略却实用性极强的核心组件。 deque属于STL序列容器,采用分段连续存储的设计思路,核心设计目标十分明确,既要兼顾随机访问的便利性,又要解决vector头部操作低效的问题,同时优化扩容性能。它与vector最本质的区别在于内存布局:vector要求所有元素存储在一整块连续的内存空间中,而deque的元素分散存储在多块固定大小的连续缓冲区里,再通过一个小型主控结构维护这些缓冲区的逻辑顺序,这也是它能实现双端高效操作的核心原因。 依托这样的设计,deque完美兼顾了三大核心优势:保留vecto...
标准模板库vector
代码仓库shanchuann/CPP-Learninng 在C++的标准模板库(STL)中,vector无疑是最常用、最基础的容器之一。它以动态数组的形式实现,既拥有数组般高效的随机访问能力,又能灵活地动态调整大小,是绝大多数场景下存储序列数据的首选。本文将从底层实现原理出发,全面剖析vector的核心机制、接口使用、性能优化以及常见陷阱,帮助你彻底掌握这个强大的容器。 STL(Standard Template Library,标准模板库)是C++标准库的核心组成部分,它通过模板技术将常用的数据结构与算法实现了分离,让开发者可以直接复用高效、通用的组件,而无需重复造轮子。 vector正是STL容器家族中的明星成员。它的本质是一个动态管理的连续内存数组,这意味着: 它支持像原生数组一样的O(1)时间复杂度随机访问; 它可以在运行时自动调整大小,无需开发者手动管理内存; 它的内存布局完全连续,因此可以完美兼容C风格的接口; 它在尾部添加或删除元素的效率极高(通常为O(1)),但在中间位置插入或删除元素则需要移动大量数据(O(n))。 这些特性使得vector成为...
C++中的四种类型转换
C++引入四种类型转换运算符,旨在解决C语言强制转换不安全且难以排查的问题,显著提升代码可读性与安全性。
C++11的final和override关键字
本文详解了C++中纯虚函数与抽象类的概念,阐述了它们如何通过定义接口规范来实现多态性。文章结合Shape与Circle的代码示例,展示了如何强制派生类实现功能,从而提升代码的灵活性与可扩展性。


