C++学习笔记STL(Standard Template Library)标准模板库-容器(一)

一、STL简介

STL标准模板库或者泛型库,其包含大量模板类和模板函数,C++提供的一个基础模板的集合,用于完成输入/输出,数据计算等功能。

STL的基本组成(6大组件+12个头文件)

STL:是容器、算法、迭代器、函数对象、适配器、内存分配器六大组件

STL的组成含义
容器 一些封装数据结构的模板类,例如 vector 向量容器、list 列表容器等。
算法 STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 <algorithm> 中,少部分位于头文件 <numeric> 中。
迭代器 在 C++STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的胶合剂。
函数对象 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。
适配器 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。
内存分配器 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。
表 2 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是相接的对象序列上的非占有视图,某个其他对象占有序列的存储。

 

posted @ 2021-07-20 21:00  刘允朵的代码屋  阅读(86)  评论(0编辑  收藏  举报