STL源码剖析之组件

本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照《STL源码剖析》进行学习记录的

STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容器供编码者实用,Boost库相对而言全面了许多,所以更适合做一些项目的开发。但STL源码中依然有很多我们值得学习,思考的地方,包括现在大部分面试,都会问及到STL的框架源码部分。所以决定将这本书其中重要的几个部分拉出来做个笔记,以加深记忆并和大神们探讨探讨。

先简单介绍一下STL中的大致组成部分,一张图就明了

1,容器(Containers):主要是各种数据结构,比如向量(vector)、链表(list)、队列(deque)、集合(set)、图(map)。这些结构均用来存放数据,这些容器也是大部分开发人员最常接触到的内容。

2,算法(Algorithms):常用的算法,比如排序(Sort),查找(Search)、拷贝(Copy)、删除(Erase)。算法主要是为了容器能够更高效的使用。

3,迭代器(Iterator):容器与算法之间的胶合剂,是所谓的“泛型指针”。个人感觉可以理解一个容器中数据类型的指针,可以快速,方便的对数据进行管理和传参,通过迭代器实现了对Operators*,Operator->,Operator++,Operator--进行重载。每一个容器都有自己特殊的迭代器操作方式。

4,仿函数(Functors):相当于一个类中进行了Operators(),这个类就有了类似函数的使用方式,例如Class Fun....  Fun::(int a,int b),Fun类中对()有进行过重载,可以当做函数来使用。

5,配接器(adapters):修饰容器、仿函数、迭代器的接口方法。例如 queue 和 stack 的方法实现底层完全依靠 depue 的方法实现,所以我们就可以将这类容器当做一种配接器容器。

6,配置器(allocators):负责空间配置与管理,实现空间动态分配、管理、释放。

如果是一名不常用STL编写代码的程序员,只要掌握容器、迭代器、仿函数的一些使用方法就可以用于项目。但作为一名“负责任”的程序员,还是尽可能的把源码都挖出来研究一下,毕竟STL最早期的源码还是存在一些漏洞和不够完美的地方,这些问题也会在后面的学习和研究中慢慢记录出来。

时间: 2024-08-10 15:11:43

STL源码剖析之组件的相关文章

STL"源码"剖析-重点知识总结

STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合套用: 容器(Containers):各种数据结构,如:vector.list.deque.set.map.用来存放数据.从实现的角度来看,STL容器是一种class template. 算法(algorithms):各种常用算法,如:sort.search.copy.erase.从实现的角度来看,STL算法

STL源码剖析 --- 空间配置器 std::alloc

STL是建立在泛化之上的.数组泛化为容器,参数化了所包含的对象的类型.函数泛化为算法,参数化了所用的迭代器的类型.指针泛化为迭代器,参数化了所指向的对象的类型.STL中的六大组件:容器.算法.迭代器.配置器.适配器.仿函数. 这六大组件中在容器中分为序列式容器和关联容器两类,正好作为STL源码剖析这本书的内容.迭代器是容器和算法之间的胶合剂,从实现的角度来看,迭代器是一种将operator*.operator->.operator++.operator-等指针相关操作予以重载的class tem

【转载】STL&quot;源码&quot;剖析-重点知识总结

原文:STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合套用: 容器(Containers):各种数据结构,如:vector.list.deque.set.map.用来存放数据.从实现的角度来看,STL容器是一种class template. 算法(algorithms):各种常用算法,如:sort.se

《STL源码剖析》学习之traits编程

侯捷老师在<STL源码剖析>中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘.如此一说,其重要性就不言而喻了.      之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法自动选择正确的执行流程,在完全任务的同时,也尽可能提高算法的执行效率.那算法如何获知迭代器的属性呢?这一光荣的任务就是traits完成的.在STL实现中,traits编程技术得到大量的运用

STL源码剖析 读书总结

<<STL源码剖析>> 侯捷著 很早就买了这本书, 一直没看, 现在在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法. 看之前我对于泛型编程了解甚少, STL倒使用的比较熟练. 看完这本书之后, 只能表示以前对于STL的使用真是跟小孩玩似得, 只懂其冰山一角. 在真正的深入到源码之后, 对于STL中不容易理解的部分如 迭代器(iterator), 仿函数(functor), 配接器(adapter)才有了一个彻彻底底的了解, 这种东西不看源码光看

STL源码剖析之allocator(1)

空间配置器(allocator)这个概念在阅读源码之前我根本没有听过,原以为内存分配都是使用new和delete运算符(注意和operator new.placement new.operator delete以及placement delete不同).在实际使用STL编程时也很少会遇到自己去实现一个空间配置器的情况.事实上,STL容器背后都要依靠空间配置器去分配空间.在阅读容器等STL组件的实现之前如果不了解空间配置器的原理,就会造成阅读上的困难.在侯捷的<STL源码剖析>一书中说道:为什么

《STL源码剖析》---stl_pair.h阅读笔记

pair是STL中的模板类型,它可以存储两个元素,它也被称作"对组".在map中已经用到了它,pair其实就是一个struct结构,存有两个public的元素,重载了几个运算符,没有什么成员函数,源代码很简单. G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_pair.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy,

《STL源码剖析》---stl_tree.h阅读笔记

STL中,关联式容器的内部结构是一颗平衡二叉树,以便获得良好的搜索效率.红黑树是平衡二叉树的一种,它不像AVL树那样要求绝对平衡,降低了对旋转的要求,但是其性能并没有下降很多,它的搜索.插入.删除都能以O(nlogn)时间完成.平衡可以在一次或者两次旋转解决,是"性价比"很高的平衡二叉树. RB-tree(red black tree)红黑树是平衡二叉树.它满足一下规则 (1)每个节点不是红色就是黑色. (2)根节点是黑色. (3)如果节点为红色,则其子节点比为黑色. (4)任何一个节

《STL源码剖析》---stl_iterator.h阅读笔记

STL设计的中心思想是将容器(container)和算法(algorithm)分开,迭代器是容器(container)和算法(algorithm)之间的桥梁. 迭代器可以如下定义:提供一种方法,能够依序寻访某个容器内的所有元素,而又无需暴露该容器的内部表达方式. 在阅读代码之前,要先了解一个新概念:Traits编程技法 template <class T> struct MyIter { typedef T value_type //内嵌型别声明 T *ptr; MyIter(T *p = 0