STL简介:

       STL(Standard Template Library),即标准模板库,是c++的标准程序库。里面包含了各种数据结构的具体实现,具有很高的可复用性。对程序而言,熟练掌握这些用法写代码将会事半功倍。

 

STL六大组件:

1. 容器(Container)

       各种数据结构,例如: vector、list、deque、set、map等。STL容器实际就是一个class template(模板)。

2. 算法

       实现各种常用算法,例如sort、search、copy、earse等。STL算法实际就是一个founction template(模板)。

3.  迭代器(Iterator)

       提供了访问容器中对象的方法。每个容器都有自己的迭代器。

4. 仿函数(Function object)

      行为类似函数,可作为算法的某种策略。

5. 迭代适配器(Adaptor)

      用来修饰容器或迭代器或仿函数接口的东西。

6. 空间配制器(allocator)

      负责空间配置与管理。

ps: 我们常用的就是容器、算法和迭代器。后面我会逐一学习这几个,并不定期更新学习结果。

 

STL容器的分类:

                                    c++ STL-STL概述

STL容器分为序列式容器和关联式容器。

序列式容器: 其中的元素有可序,但未必有序。

关联式容器: 关联式容器中每笔数据都有key和value,当元素被插入容器中时,容器内部结构便依照其值大小,以某种特定规则将元素插入到容器中。关联式容器没有头尾(只有最大和最小元素),所以没有push_back、push_frount、pop_back、pop_front、end()、begin()等函数。

 

STL容器底层数据结构实现

C++ STL 的实现:

1.vector    底层数据结构为数组 ,支持快速随机访问

2.list         底层数据结构为双向链表,支持快速增删

3.deque   底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问

              deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下:

               [堆1] --> [堆2] -->[堆3] --> ...

              每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的结合品.

4.stack     底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

5.queue   底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

               (stack和queue其实是适配器,而不叫容器,因为是对容器的再封装)

6.priority_queue 底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

7.set 底层数据结构为红黑树,有序,不重复

8.multiset 底层数据结构为红黑树,有序,可重复

9.map 底层数据结构为红黑树,有序,不重复

10.multimap 底层数据结构为红黑树,有序,可重复

11.hash_set 底层数据结构为hash表,无序,不重复

12.hash_multiset 底层数据结构为hash表,无序,可重复

13.hash_map 底层数据结构为hash表,无序,不重复

14.hash_multimap 底层数据结构为hash表,无序,可重复

15. hash_table

 

相关文章: