简单地说,标准模板库(STL)是一组模板类和函数,向程序员提供了:
• 用于存储信息的容器;
• 用于访问容器存储的信息的迭代器;
• 用于操作容器内容的算法。

STL容器

容器是用于存储数据的 STL 类,STL 提供了两种类型的容器类:
• 顺序容器;
• 关联容器。

顺序容器

顾名思义,顺序容器按顺序存储数据,如数组和列表。顺序容器具有插入速度快但查找操作相对 较慢的特征。

STL 顺序容器如下所示。
• std::vector:操作与动态数组一样,在后插入数据;可将 vector 视为书架,您可在一端添加和 拿走图书。
• std::deque:与 std::vector 类似,但允许在开头插入或删除元素。
• std::list:可将 STL list 类视为普通链表的 STL 实现,操作与双向链表一样。可将它视为链条,对象被连接在一起,您可在任何位置添加或 删除对象。
• std::forward_list:类似于 std::list,但是单向链表,只能沿一个方向遍历。

关联容器


关联容器按指定的顺序存储数据,就像词典一样,将降低插入数据的速度,但在查询方面有很 大的优势
STL 提供的关联容器如下所示。

• std::set:存储各不相同的值,在插入时进行排序;容器的复杂度为对数。
• std::unordered_set:存储各不相同的值,在插入时进行排序;容器的复杂度为常数。这种容器 是 C++11 新增的。
• std::map:存储键-值对,并根据唯一的键排序;容器的复杂度为对数。
• std::unordered_map:存储键-值对,并根据唯一的键排序;容器的复杂度为对数。这种容器是 C++11 新增的。 • std::multiset:与 set 类似,但允许存储多个值相同的项,即值不需要是唯一的。
• std::unordered_multiset:与 unordered_set 类似,但允许存储多个值相同的项,即值不需要是唯 一的。这种容器是 C++11 新增的。
• std::multimap:与 map 类似,但不要求键是唯一的。
• std::unordered_multimap:与 unordered_map 类似,但不要求键是唯一的。这种容器是 C++11 新增的。

image.png
image.png

容器适配器

容器适配器(Container Adapter)是顺序容器和关联容器的变种,其功能有限,用于满足特定的需 求。主要的适配器类如下所示
• std::stack:以 LIFO(后进先出)的方式存储元素,让您能够在栈顶插入(压入)和删除(弹出)元素。
• std::queue:以 FIFO(先进先出)的方式存储元素,让您能够删除先插入的元素。

STL迭代器

简单的迭代器是指针。给定一个指向数组中的第一个元素的指针,可递增该指针使其指向下一 个元素,还可直接对当前位置的元素进行操作。

STL字符串类

STL 提供了一个专门为操纵字符串而设计的模板类:std::basic_string,该模板类的两个常用具 体化如下所示。
• std::string:基于 char 的 std::basic_string 具体化,用于操纵简单字符串。