- STL(standard Template Library)标准模板库
广义:容器,算法,迭代器 【容器和算法 之间 通过迭代器无缝衔接】
STL几乎所有的代码都采用了模板类或者模板函数
细分六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
1.1容器
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系
1.2算法:algorithm
质变算法:运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除
非质变算法:运算过程中不会更改区间内的元素的内容,例如查找、计数;
1.3迭代器
每个容器有自己专属的迭代器。
迭代器使用类似于指针
五种:输入、输出、前向、双向、随机访问迭代器(这两个常用)
2.具体例子
容器:vector; 算法:for_each; 迭代器:vector<int>::iterator
可自定义容器数据内容:内部数据为结构体vector<Person> v;
容器内部再嵌套容器 vector < vector< int >> v;
3.string
4.vector
迭代器:iterator
数据结构和数组非常相似,也称为单端数组
区别:vector可以动态扩展 → 找新的更大的空间,原数据拷贝,是否原空间
常用:begin() 第一个元素;end() 最后一个元素再往后一位
5.deque
迭代器:const_iterator
双端数组,可以对头端进行插入删除操作
与vector的区别:
%vector对于头部的插入删除效率低,数据量越大,效率越低
%deque对头部的插入删除速度比vector快
%访问元素时的速度会比deque快
6.stack
先进后出的数据结构,只有一种出口
不允许有遍历行为;栈可以为空,栈可以返回元素个数
入栈:push; 出栈:pop
7.queue
先进先出,有两个出口
入队:push;出队:pop
允许从一端新增数据,从另一端移除数据
只有队头和队尾才能被外界使用,因此不允许有遍历行为
8.list:链表
迭代器:只支持前移和后移(一个一个找),属于双向迭代器
功能:将数据进行链式储存
链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
组成:链表由一系列结点组成。
结点:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
STL中的链表是一个双向循环链表
双向:(每一个结点即记录了下一个节点,又记录了上一个节点)
循环:第一个节点的前 记录了最后一个节点 ; 最后一个节点的后 记录了第一个节点
9.set/multiset
插入时自动排序
set不允许有重复的元素
multiset运行有重复的元素
10 pair对组创建
功能:成对出现的数据,利用对组可以返回两个数据
两种创建方式:
pair<type, type>p (value1, value2);
pair<type, type> p = make_pair( value1, value2);
11.map/multimap
简介:所有元素都是pair(对组);pair第一个元素为key(键值),起索引作用,第二个元素为value(实值);所有元素都会根据元素的键值自动排序(关联式容器,二叉树实现)
可通过key快速找到value
map不允许有重复的key值;multimap允许有重复的key值
构造:map<int, int > m; m.insert(part<int , int>(1,10));