
STL源码剖析
ziggy7
这个作者很懒,什么都没留下…
展开
-
STL源码剖析 6、算法
算法概观 以有限的步骤,解决逻辑或数学上的问题,这一专门科目称之为算法。 算法分析与复杂度分析 big-O STL算法总览 见6.1.2表 质变算法 mutating algorithms 概念:在运算过程中会更改区间内(迭代器所指)的元素内容。 例子:copy、swap、replace、fill、remove等 注意:不能用于const_iterator 非质变算法 nonmutating algorithms 概念:在运算过程中不会更改区间内(迭代器所指)的元素内容。 例子:find、search、co原创 2020-07-27 21:13:58 · 183 阅读 · 0 评论 -
STL源码剖析 8、配接器
概念 将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作 分类 ●仿函数配接器:数量最多,有bind、negate、compose等。 本身要可配接才能获得配接能力,一元函数继承自unary_function、二元…、成员函数以mem_fun处理、一般函数以ptr_fun处理(成员函数和一般函数没有operator()) ●容器配接器:stack和queue内部是deque实现 ●迭代器配接器:insert iterators,reverse i原创 2020-07-26 20:58:16 · 167 阅读 · 0 评论 -
STL源码剖析 7、仿函数(函数对象)
仿函数概述 概念:又名函数对象,是一种具有函数特质的对象(函数对象),可以像函数一样调用(仿函数) 编写:是一个class,重载了operator() 使用:有两种,用对象调用和临时对象调用 int main() { //用对象调用 greater<int>ig; ig(4, 6); //临时对象调用 greater<int>()(4, 6); } STL仿函数与STL算法关系: 可配接性 ...原创 2020-07-26 10:38:21 · 146 阅读 · 0 评论 -
STL源码剖析 5、关联式容器
关联式容器 树的导览 二叉搜索树: ●任何节点的值一定大于左子树中每一个节点的值,并小于右子树的每一个节点的值。 ●从根一直往左,直到无左路可走,就是最小元素(换成右就是最大) ●高度可能不平衡,造成搜索效率低,用AVL树改进 ●中序遍历有序(刷题用) AVL树:加了额外平衡条件的二叉搜索树 ●任何节点的左右子树高度差最多为1 ●违反平衡条件时用单旋转、双旋转 调整 红黑树 RB-tree 性质: ●是二叉搜索树 ●每个节点不是红色就是黑色 ●根节点是黑色 ●父子节点不能同时为红 ●任意节点到叶子节点的原创 2020-07-23 21:39:29 · 154 阅读 · 0 评论 -
STL源码剖析 4、序列式容器
容器的分类 分为序列式容器和关联式容器 vector vector与array 两者唯一差别在于空间的运用的灵活性,array是静态空间,一旦配置了就不能改变。vector是动态空间,随着新元素的加入,它的内部机制会自行扩充空间以容纳新元素。 vector源代码 见书p116 使用vector必须包括<vector>,但vector实现于更底层的<stl_vector.h> vector迭代器 vector维护的是连续线性空间,所以不论元素型别,普通指针都可以满足作为vector的原创 2020-07-23 11:32:34 · 169 阅读 · 0 评论 -
STL源码剖析 3、迭代器概念与traits编程技法
迭代器 设计思维 设计模式:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。 迭代器作用:STL的中心思想是将容器和算法分开,彼此独立设计,最后再用胶着剂将它们撮合在一起,迭代器扮演胶着剂 迭代器是一种是智能指针 迭代器行为类似于指针,最重要的作用是内容提领(deference)和成员访问(member access),因此,迭代器最重要的编程工作就是对operator*和operator->进行重载工作,可以参考auto_ptr(过时了)。 为什么原创 2020-07-22 10:52:27 · 167 阅读 · 0 评论 -
STL源码剖析 2、空间配置器
空间配置器:配置空间(不一定是内存,也有可能是硬盘,所以叫空间配置器)放置资料 SGI标准的空间配置器allocator 只是把C++的::operator new 和::operator delete做了一层薄薄的包装,效率不佳 SGI STL的每一个容器都指定缺省空间配置器为alloc,如下面的vector声明 template<class T, class Alloc = alloc> class vector{}; SGI 缺省的空间配置器,std::alloc class Foo{.原创 2020-07-20 19:53:52 · 162 阅读 · 0 评论 -
STL源码剖析 1、STL概论与令人困惑的一些语法
STL概论 STL的诞生 软件界一直希望建立一种可重复运用的东西,即提升复用性。复用性必须建立在某种标准之上。 为了建立数据结构与算法的一套标准,并且降低其间的耦合关系以提升各自的独立性、弹性、相互合作性,STL诞生了 STL组件 ●容器(container):常用数据结构,大致分为两类,序列容器,如vector,list,deque,关联容器,如set,map。在实现上,是类模板(class template) ●迭代器(iterator):一套访问容器的接口,行为类似于指针。它为不同算法提供的相对统一的原创 2020-07-17 14:44:17 · 303 阅读 · 0 评论