什么是STL
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包罗数据结构与算法的软件框架。
俗话说的好,不懂STL,不要说你会C++。C++中拥有许多底层的数据结构以及算法,有了STL就不需要自己造轮子了,不得不承认我们大多数人都喜欢自己造轮子,总觉得自己造的轮子会与众不同,实际上可能还比不上别人提供的轮子。
STL版本
原始版本(HP版本)
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六大组件
容器
名字非常高大上,实际上就是数据结构,比如:string、vector、list、deque、map等。
算法
常见的有find、swap、reverse、sort、merge等。
仿函数
greater、less……
空间配置器
一些频繁需要访问内存空间的容器由空间配置器在内存池上分配内存,内存池的内存也是来源于堆上的。
迭代器
iterator、const_iterator、reverse_iterator、const_reverse_iterator。
配接器
stack、queue、priority_queue。
STL缺陷
- STL库的更新很慢;
- STL没有支持线程安全,并发环境下需要自己加锁。且锁的粒度是比较大的;
- STL极度的追求效率,导致内部比较复杂;
- STL的使用会有代码膨胀的问题,这是模板语法本身导致的。