一、STL是什么?
STL
英文全称为Standard Template Library
,常被称为标准模板库或者泛型库。
里面包含有大量的模板类和模板函数,是C++提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
从根本上来说,STL
是一些容器、算法和一些其他组件的集合,比如我们最常见的vector
, map
等等,就属于STL
。
它其中最重要的概念就是模板,以达到泛型编程的目的,不清楚的请先阅读另外一篇文章:模板。
二、STL组成
STL共有6大组件,包含了13个头文件。
首先是6大组件:
组件 | 功能 |
---|---|
容器 | 一些封装好的数据结构模板类,比如vector ,list 等等 |
算法 | STL提供了100个左右的数据结构算法, 它们也都被设计成了一个个模板函数,大部分包含在头文件algorithm 中,少部分包含在numeric 中 |
迭代器 | 我们对STL中容器的读写操作,都是通过这个迭代器完成的,使用起来和指针很像,相当于指针的一种抽象 |
函数对象 | 类将() 运算符重载位成员函数,这个类就称为函数对象类, 这个类的实例对象就是函数对象,又称为仿函数 |
适配器 | 让一个类的接口适配成用户的指定形式,让原本不能一起工作的两个类在一起工作 |
内存分配器 | 为上面的容器模板类提供自定义的内存申请和释放功能, 除非有特殊需求,否则我们一般用不着,默认即可 |
所在的头文件有以下这些:
iterator | function | vector |
---|---|---|
list | queue | stack |
deque | set | map |
algorithm | numeric | memory |
utility |
需要注意的是,所有的STL
内容, 均在std
这个命名空间之内。
这是很常见的错误, 一旦你前面没写using namespace std;
, 那么就会给你一直报错,特别是一些stl
的算法函数, 大家很容易忘记这些函数还需要一个std
命名空间才能使用。
三、STL容器
所谓容器, 就是帮助我们管理内存, 存储数据的结构。
这样我们就不用自己去亲自new
与delete
内存,可以极大提高我们的程序开发效率。
比如vector
,我们只需要通过函数调用,来达到存储或访问或删除数据等功能,而完全无需自己操心内存的管理
STL
容器也有三个类别,分别是序列容器、排序容器与哈希容器
- 序列容器