STL(Standard Templete Library)标准模板库
STL提供了一组表示容器、迭代器、函数对象和算法的模板。容器是一个与数组类似的单元,可以存储若干个值,STL容器是同质的,即存储的值的类型相同;算法是完成特定任务的处方;迭代器能够用来遍历容器的对象,是广义指针;函数对象是类似于函数的对象,可以是类对象或函数指针。STL使得能够构造各种容器和执行各种操作。
泛型编程(Generic Programming)
STL是一种泛型编程。面向对象编程关注的是编程的数据方面,而泛型编程关注的是算法。
泛型编程旨在编写独立于数据类型的代码。
迭代器
迭代器使算法独立于使用的容器类型。模板使得算法独立于存储的数据类型。
总结一下STL方法:首先是处理容器的算法,应尽可能用通用的术语来表达算法,使之独立于数据类型和容器类型。为使通用算法能够适用于具体情况,应定义能够满足需求的迭代器,并把要求加到容器设计上。即基于算法要求,设计基本迭代器的特征和容器特征。
迭代器类型
迭代器层次结构:输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器。
容器
容器概念是具有名称(如容器、序列容器、关联容器)的通用类别;容器类型是可用于创建具体容器对象的模板。
以前的11个容器类型分别为:deque、list、queue、priority_queue、stack、vector、map、multimap、set、multiset、bitset;C++新增了forward_list、unordered_map、unordered_multimap、unorder_set、unordered_multiset,且不将biset视为容器,而将其视为一种独立的类别。
编译时间为0,固定时间复杂度为
O
(
1
)
O(1)
O(1),线性时间复杂度为
O
(
n
)
O(n)
O(n)。
序列容器
7种STL的序列容器:deque、list、queue、priority_queue、stack、vector、forward_list。
关联容器
STL提供了四种关联容器:map、multimap、set、multiset。基于树结构。
无序关联容器
C++11提供了unordered_map、unordered_multimap、unorder_set、unordered_multiset四种无序关联容器。基于哈希表结构。
函数对象(函数符,functor)
算法
STL将算法库分为四组:
- 非修改式序列操作
- 修改式序列操作
- 排序和相关操作
- 通用数字运算