STL
文章平均质量分 84
小飞侠hello
这个作者很懒,什么都没留下…
展开
-
链表的扩展应用
综上,如果进行 N 次操作,那么大约需要操作节点的次数为 N-1+N=2N-1,其中 N-1 表示 N-1 个不是尾节点的每个节点以 O(1) 的时间复杂度操作节点的总次数,N 表示 1 个尾节点以 O(N) 的时间复杂度操作节点的总次数。(2N-1)/N ~ 2,因此该算法的平均时间复杂度为 O(1)。① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。原创 2022-08-22 16:56:29 · 207 阅读 · 0 评论 -
effective STL
基于接口和实现分离的原则。了解stl的接口和stl的实现。原创 2022-05-17 11:20:25 · 1284 阅读 · 0 评论 -
STL源码剖析之配接器
adapter(配接器)在STL组件的灵活组合运用上,扮演者转换器的角色。adapter来源于一种适配器模式,其功能是:将一个class接口转换为另一个class的接口,使得原本因接口不兼容而不能合作的classes,可以一起运作。主要包括仿函数配接器(function adapter)、容器配接器(container adapter)、迭代器配接器(iterator adapter)。应用于容器STL提供两个容器stack、queue,其实是一种适配器,它们将deque修饰为另一种容器风貌原创 2022-05-17 10:53:28 · 488 阅读 · 0 评论 -
STL源码剖析之仿函数
1.把该操作设计为一个函数,再将函数指针当成算法的一个参数;或者将该操作设计为一个所谓的仿函数(就语言而言其实是一个class),再以该仿函数产生一个对象,并将此对象作为算法的一个参数。所以仿函数其实就是一个行为类似函数的对象。仿函数类对象像函数一样被调用,调用仿函数类对象时,实际调用的是仿函数类中重载的operator()函数。仿函数的主要用途是搭配STL算法。template <class _ForwardIter1, class _ForwardIter2>_Forwa原创 2022-05-16 17:27:48 · 353 阅读 · 0 评论 -
STL源码剖析之迭代器
迭代器是一种行为类似指针的对象。迭代器最重要的工作是operator*、operator ->、operator ++。每一种STL容器都提供专属迭代器。2.1 迭代器相应类型概念、应用场景 & 偏特化概念在实际的算法中,在运用迭代器时,会用到迭代器所指对象中的相应类型(associate type)。那么算法实现中该如何满足 声明一个以“迭代器所指对象(中)的类型”为类型的成员/参数,或返回值是“迭代器所指对象(中)的类型”的类型 的需求呢?可分为以下三种情况:① 迭代原创 2022-05-04 18:19:38 · 807 阅读 · 0 评论 -
STL 源码剖析之算法
1.用o(n)表示复杂度2.常用容器的常用算法复杂度。3.操作区间(前闭后开区间,这就是迭代器,一般用iterator begin,iterator end来表示)。迭代器就是一种行为类似指针的对象。4.算法有时需要仿函数进行配合一起使用。5.算法之排序sorta.所有的关联容器都拥有自动排序功能,不需要sort.b.序列容器中的stack、queue、priority_queue有特殊的出入口,不允许用户对元素排序。c.list的迭代器属于bidirectionaliter原创 2022-05-16 10:57:42 · 546 阅读 · 0 评论 -
STL源码剖析
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。它们之间的关系可通过下图来说明。容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。 算法:各种常用的算法,如sort、find、copy、for_each等 迭代器:扮演了容器与算法之间的胶合剂。 仿函数:行为类似函数,可作为算法的某种策略。 适配器:一.原创 2022-04-13 22:19:40 · 1122 阅读 · 4 评论 -
STL源码剖析之容器
容器种类 功能 序列容器 主要包括 vector 向量容器、list 列表容器以及 deque 双端队列容器。之所以被称为序列容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置,元素就会位于什么位置。 排序容器 包括 set 集合容器、multiset多重集合容器、map映射容器以及 multimap 多重映射容器。排序容器中的元素默认是由小到大排序好的,即便是插入元素,元素也会插入到适当位置。所以关联容器在查找时具有非常好的性能。原创 2022-03-03 09:57:25 · 532 阅读 · 0 评论 -
散列表(哈希表)
散列表(hashtable)是居于“开链的做法”。本质是一个vector和每个vector成员维护一个link list。需要注意针对这个list搜索只能一种线性操作。hashtable 由桶子(buckets)(本质是vector)和 节点(node)(本质是list)组成。hashtable 的数据结构 所以:buckets 就是桶子,node就是节点。其中node 结构定义:迭代器结构迭代器永远维系着与整个buckets vector 的关系,......原创 2022-05-12 17:59:16 · 936 阅读 · 0 评论 -
二叉树、平衡二叉树、红黑树、B树、B+树
二叉树根节点:没有父节点的节点;叶结点:无子节点的节点;深度(或路径长度):根节点到某一节点的路径长度(边数)。高度:某节点到其最深子节点(即叶节点)的路径长度。特点:1.任何一个节点最多只有2个子节点。2.任意节点的键(key)一定大于其左子树中的每一个节点的键(key),并小于其右子树中每一个节点的键(key).红黑树R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红原创 2022-03-03 11:12:10 · 618 阅读 · 0 评论 -
STL源码剖解之空间配置器
当我们 new 一个对象的时候,包含两个操作,首先 operator new 分配内存,再调用构造函数构造对象内容 但我们 delete 一个对象的时候,同样先调用析构函数,再调用 operator delete 释放内存STL 将这个过程薄薄的包装了一下,实际上没优化配置器定义于 中, 中又包含 <stl_alloc.h> <stl_construct.h>内存配置由 alloc::allocate() 负责,内存释放由 alloc::deallocate() 负责 。...原创 2022-04-14 16:42:27 · 1018 阅读 · 0 评论