C++学习笔记STL(Standard Template Library)标准模板库-容器(一)
一、STL简介
STL标准模板库或者泛型库,其包含大量模板类和模板函数,C++提供的一个基础模板的集合,用于完成输入/输出,数据计算等功能。
STL的基本组成(6大组件+12个头文件)
STL:是容器、算法、迭代器、函数对象、适配器、内存分配器六大组件
STL的组成 | 含义 |
---|---|
容器 | 一些封装数据结构的模板类,例如 vector 向量容器、list 列表容器等。 |
算法 | STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 <algorithm> 中,少部分位于头文件 <numeric> 中。 |
迭代器 | 在 C++STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的胶合剂。 |
函数对象 | 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。 |
适配器 | 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。 |
内存分配器 | 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。 |
<iterator> | <functional> | <vector> | <deque> |
<list> | <queue> | <stack> | <set> |
<map> | <algorithm> | <numeric> | <memory> |
<utility> |
二,容器库
是类模板与算法的汇集,,允许程序员简单地访问常见数据结构,例如队列、链表和栈。有三类容器——顺序容器、关联容器和无序关联容器——每种都被设计为支持不同组的操作。
容器管理为其元素分配的存储空间,并提供直接或间接地通过迭代器(拥有类似指针属性的对象)访问它们的函数。
大多数容器拥有至少几个常见的成员函数,并共享功能。特定应用的最佳容器不仅依赖于提供的功能,还依赖于对于不同工作量的效率。
1)顺序容器:实现能按顺序访问的数据结构,包括
array(静态连续数组);
vector(动态的连续数组);
deque(双端队列);
forward_list(单链表);
list(双链表)
2)关联容器:实现能快速查找(O(log n)复杂度)的数据结构。
set (唯一键的集合,按照键排序)
map(键值对的集合,按照键排序,键是唯一的);
multiset(键的集合,按照键排序)
multimap(键值对的集合,按照键排序)
3)无序关联容器:提供能快速查找(均O(1)最坏O(n)的复杂的)的无语(哈希)数据结构。
unordered_set(键的集合,按照键生成散列)
unordered_map(键值对的集合,按照键生成散列,键是唯一的);
unordered_multiset(键的集合,按照键生成散列)
unordered_mulitimap(键值对的集合,按照键生成散列)
4)容器适配器:提供顺序容器的不同接口
stack(适配一个容器以提供栈(LIFO 数据结构)
queue适配一个容器以提供队列(FIFO 数据结构)
priority_queue适配一个容器以提供优先级队列
span是相接的对象序列上的非占有视图,某个其他对象占有序列的存储。