STL(Standard Template Library)即标准模板库,善用STL库,能有效的减少代码量,提高程序执行效率。
本文旨在介绍STL的一些基础。


STL基础内容

STL由六大组件构成:容器(Container)、迭代器(Iterator)、算法(Algorithm)、仿函数(Function object)、迭代适配器(Adaptor)和空间配制器(allocator)。前三个是STL的三个主要组件。

  1. 容器
  • 序列式容器(Sequence containers)
    每个元素都有其固定的位置,取决于插入的时间和位置,与元素值无关。eg: vector(向量)、list(链表)、deque(双端队列)…
  • 关联式容器(Associated containers)
    元素的位置取决于容器底层结构的排序规则,与插入的顺序无关。eg: set(集合)、map(映射)…
  • 容器适配器(congtainer adapters)
    不具备容器等某些特性(迭代器…),但又由容器封装完成。eg: stack(栈)、queue(队列)、priority_queue(优先队列)…
  1. 迭代器
    迭代器可以近似理解为c语言中的指针,它主要支持两个运算符:自增(++)和解引用(单目运算符*),自增运算符用来移动迭代器的位置,解引用运算符可以引用当前迭代器位置的元素并且可以修改当前元素。以及其他一些运算符:==、!=、=。
    迭代器由以下方式定义:
    1
    vector<int>::iterator it;///声明int类型的vector的迭代器it
  2. 算法
    STL中自带约百来个模板函数,常用的有sort、min、max、swap、find、reverse…正是这其中的算法,有效的减少了编写程序的代码量,提高了程序的执行效率。

共有函数

1
2
3
4
5
6
7
8
begin();///返回容器起始的迭代器
end();///返回容器末尾的下一个迭代器
size();///返回容器内元素的个数,部分可用length()
empty();///判断容器是否为空
swap();///交换两个容器
clear();///清空容器
= /// 重载了 = 的容器可以直接构造容器
==, <, >, <, >=, != ///按照字典序比较两个容器大小

参考文献:

OI Wiki: https://oi-wiki.org