##STL 简介:
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是
由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在
虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的目的就是标准化组件,不用再重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装。
####在C++标准中,STL被组织为下面的17个头文件:
#include <algorithm>
#include <deque>
#include <iterator>
#include <functional>
#include <array>
#include <vector>
#include <list>
#include <forward_list>
#include <map>
#include <unordered_map>
#include <memory>
#include <numeric>
#include <queue>
#include <set>
#include <unordered_set>
#include <stack>
#include <utility>
####主要划分3部分:
algorithm(算法)、container(容器)和iterator(迭代器)
container(容器):
可以理解为:装东西的箱子,里面可以是 苹果 香蕉 西瓜 土豆 (int double string struct) 等等..
- vector(向量): 内存连续储存的元素
- list (列表): 由节点组成的双向链表,每个节点包含一个元素
- stack(栈):先进后出的排列
- queue(队列):先进先出的排列
- map(映射):由{键,值}对 组成的集合
- multimap(多重映射):有重复键值的元素插入容器,元素的键值与元素的映照数据的映照关系,是多对多的
- set(集合):所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值
- multiset(多重集合):允许存在两个次序相等的元素的集合
- deque(双队列):是一种优化了的对序列两端元素进行添加和删除操作的基本序列容器
algorithm(算法):
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最
大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中
常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>
体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
<functional>中则定义了一些模板类,用以声明函数对象。
iterator(迭代器):
迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法
都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。
<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的
许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时
也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有
容器中的默认分配器。
98年菜鸡一枚,请大佬们多多关照!