上图简单的描述了STL几个部分的结构。
说明:
Allocator :为了将Container从底层的内存分配策略独立出来,而让Container仅仅依赖于统一的接口,Allocator提供了这样的作用。在Allocator主要提供功能是:1,分配内存,在allocate中提供;2:释放内存,在deallocate中提供;3:构建对象,将内存初始化为有含义的Object,在construct中提供;4:析构对象,将Object析构掉,还原为内存,在destroy中提供。
一些内存管理策略可以在Allocator中实现或者进一步提供一个内存管理层在Allocator之下。
Container :实现各自容器的逻辑功能,比如vector,map,set, list,他们只关心自己应该具有的功能。在C++中,为了避免virtual机制的引入导致性能的损失,所以各个容器之间的函数接口采用了一种约定的方式定义,而非定义一个公共的interface出来,然后设计出一个container的class hierarchy,因此各个Container类之间是独立的类,大家都有一些共同函数接口。
Iterator :提供一种独立于容器类型,能够序列化的遍历容器元素的接口设计,同样为了高效的访问容器元素,Iterator也没有Class Hierarchy的设计,Iterator class都是自己容器提供class 定义,设计Iterator中引用元素的方式和遍历方式,只要遵循Iterator能够序列化的遍历自己。
Algorithm :针对Iterator的类型,提供了一些常用的算法,他是独立于容器的,但为容器提供了一个工具函数集。
在Allocator,Container,Iterator在内部定义了很多的typedef,这为template实现提供了一个通用的类型接口,而traits就用来解析对应的内部typedef的接口。
阅读(906) | 评论(0) | 转发(0) |