目录
什么是STL
STL标准模板库:是c++标准库的重要组成部分,是一个高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。
STL的一个重要特点是数据结构和算法的分离。 尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组;
STL另一个重要特性是它不是面向对象的。 为了具有足够通用性,STL主要依赖于模板而不是封装,继承和虚函数(多态性)——OOP(面向对象编程)的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、
<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
STL组成部分
- 容器(containers):是一种数据结构容器,使用类模板的方式提供,我们可以方便的进行数据的存储操作。
- 适配器(adapters):以序列式容器为基础,提供的栈,队列和优先级队列的这种容器。
- 迭代器(iterators):提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象
- 算法(algorithm):是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用。
- 空间配置器(allocator):其中主要工作包括两部分:1,对象的创建与销毁。2,内存的创建与释放。
- 仿函数(functor):仿函数又称为函数对象,仿函数本质就是类重载了一个operator(),创建一个函数对象,实现类似函数的 调用过程
容器
1,序列式容器
- 每个元素都有固定位置,取决于插入时机和地点。与元素值无关。
- vector(向量):底层数据结构是数组,可以随机存取数据元素(用索引直接存取),数组的尾部添加和移除元素很快,但在头部和中部插入元素比较耗时。
- deque(双端队列):底层数据结构是数组,可以随机存取数据元素,在数组的头部和尾部插入和删除元素很快。
- list(列表):底层数据结构是双向链表,不提供随机存取数据元素(需要按顺序走到要存取的元素),在任何位置插入和删除都很快,只需要简单的移动一下指针。
2,关联式容器
- 元素位置取决于特定的排序准则,和插入的顺序无关,底层数据结构为二叉树。
- set(集合):内部元素依据其值自动排序,set内相同的数值元素只能出现一次。
- multiset(多重集合):内部元素依据其值自动排序,set内允许出现重复的元素。
- map(映射):map的元素是成对的键值对,内部元素的值依据键自动排序,键只允许出现一次。
- multimap(多重映射):多重映射是map的增强版,允许键出现多次。
适配器
1.什么是适配器
STL提供了三种适配器stack,queue和priority_queue。这些适配器是包装了序列式容器(vector,deque,list)中的一种。因此所谓的适配器就是序列式容器的包装器,注意:适配器没有提供迭代器。
2.stack(栈)
栈可以使用序列式容器中的vector,deque,list中的任意一种作为其底层的数据结构。默认是使用deque来实现的stack。
3.queue(队列)
队列可以使用deque和list中的任意一种作为其底层的数据结构。默认是使用deque来实现的queue。
4.priority_queue(优先队列)
优先队列也是一种队列,不过在进入队列之后会对元素进行排序,可以使用vector和deque来实现其底层结构,默认是使用vector来实现priority_queue。
5.序列式容器和适配器比较
文章来源:https://www.cnblogs.com/metalsteel/p/6289566.html