目录
STL介绍
STL-standard template libaray 标准模板库;
STL是C++标准库的重要组成部分,提供了一系列的模板类和函数,用于支持常用的数据结构和算法;不仅是一个可复用的组件库,且是一个包含数据库结构与算法的软件框架;
通过使用STL的容器和算法,可方便地实现常见的操作如快速排序、二分查找、查找最大值等,此外,还提供了迭代器来对容器进行遍历和访问;
STL版本
原始版本
- Alexander Stepanov、Meng Lee,惠普实验室完成;
- HP版本,所有STL实现版本的始祖;
P.J.版本
- 由P. J. Plauger开发,继承自HP版本;
- 被Windows Visual C++采用,不能公开或修改;
- 缺陷,可读性较低,符号命名怪异;
RW版本
- Rouge Wage公司开发,继承自HP版本;
- 被C+ + Builder 采用,不能公开或修改,可读性一般;
SGI版本
- Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本;
- 被GCC(linux)采用,可移植性好,可公开、修改甚至贩卖;
- 命名风格和编程风格上,阅读性非常高;
STL六大组件
“容器”是STL库中最基础的组件,可存储和管理各种类型对象、数据结构的类模板;
- 仿函数(Function Object):greater、less、...
- 算法(Algorithm):find、swap、reverse、sort、merge、...
- 迭代器(Iterator):iterator、const_iterator、reverse_iterator、const_reverse_iterator
- 空间配置器(Allocator):allocator
- 适配器(Adaptor):stack、queue、priority_queue
- 容器(Container):string、vector、list、deque、map、set、multimap、multiset
- vector,提供动态数组的特性,支持随机访问;
- list,提供双向链表的特性,支持在任意位置插入和删除元素;
- deque,提供双端队列的特性,支持在两端快速插入和删除元素;
- map,提供键值对映射的特性,使用红黑树实现,支持快速查找和插入;
- set,提供集合的特性,使用红黑树实现,支持快速查找和插入;
STL缺陷
- STL库更新太慢;
- STL目前都不支持线程安全,并发环境下需自己加锁,且锁的粒度较大;
- STL极度追求效率,导致内部比较复杂,如类型萃取、迭代器萃取;
- STL的使用会有代码膨胀的问题,如使用vector<int>/vector<string>/vector<double>这样会生成多份代码,这是模板语法本身导致的;