本文是一篇读书笔记,可以在偏向文字叙述方面让你了解STL,代码涉及到的不多,如果你明天面试,看看整个也许有点帮助,笔者就曾经被人问到:vector和list有什么区别?很遗憾当时我没有回答上来,现在的话似乎好一点了。他们都可以在尾部添加元素,vector是可以动态扩展的数组,list是链表,优势是在任何位置插入和删除元素都很快。而vector是在尾部添加数据比较快,在中间插入元素就很慢了。
STL(standard template library)是一个泛型程序库。从程序员的角度来看,STL是由一些可适应不同需求的集合类和一些能够在这些数据集合上运作的算法构成。STL内的所有组件都由template构成,所以其元素可以是任意类型。更妙的是STL建立了一个框架,在此框架下可以提供其他集合类或算法,与现有的组件搭配共同运作。
6.1STL组件
容器(Container):用来管理某类对象的集合。
迭代器(Iterator):用来对一个对象集合内遍历元素。迭代器的好处是为所有各式各样的容器提供了一组很小的共通接口。每一种容器都提供了自己的迭代器,而这些迭代器了解容器的内部结构,知道该做什么。
算法(Algorithm)用来处理集合内的元素。它们可以是查找、排序、修改、使用元素。
STL的基本观念就是将数据和操作分离。数据由容器来加以管理,操作由可定制的算法来定义。迭代器在两者之间充当粘合剂,使得任何算法都可以和任何容器交互运作。
6.2容器
先来看一张图,该图非常好,帮助我们记忆STL的容器。
下面的是一个表格,说明白了啥是啥。来源于大师BJARNE STROUSTRUP 的书籍《C++程序设计语言》。
<vector> | 可变大小一维数组 |
<deque> | 双端队列 |
<forward_list> | 单向列表 |
<list> | 双向列表 |
<map> | 关联数组 |
<set> | 集合 |
<unordered_map> | 哈希关联数组 |