一、概念
STL分为:容器、迭代器、适配器、算法和函数对象;
容器分为:顺序性容器和关联式容器;
迭代器分为:随机访问迭代器、双向迭代器、前向迭代器、输入迭代器、和输出迭代器;
二、容器
1.顺序容器
(1)vector:线性顺序结构,相当于一个动态数组,它的大小可以预先指定也可以不指定,而且它可以自动扩展,不过它只能在一端进行操作。
创建对象:vector<类型>v1
基本操作:
v1.capacity();//容器容量
v1.size();//容器大小
v1.push_back();//尾部插入
v1.pop_back();//尾部删除
v1.begin();//头元素的迭代器
v1.end();//尾元素的迭代器
(2)list:双向循环链表,不连续存储不支持随机访问、支持任意位置插入和删除。
list是一个线性链表结构,但它不把所有的元素都存储在一块连续的空间中,而是采用许多个连续的存储块。
创建对象:
list <类型>L1;
元素访问:
L1.front();
L1.back();
L1.begin();
L1.end();
添加元素:
L1.push_back();
L1.push_front();
L1.insert(pos, elem);
L1.insert(pos, n , elem);
L1.insert(pos, begin, end);
L1.pop_back();
L1.pop_front();
L1.erase(begin, end);
L1.erase(elem);
相关函数:
sort():对list中的元素进行排列;
merge():将两个容器合并,合并后的元素从小到大排列;
splice():指定合并位置,但是不能自动排序;
(3)deque:相当于一个双端队列,对序列两端元素进行添加和删除操作的基本序列容器。
deque允许两端添加和删除。采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。
创建对象:
deque<类型>d1;
基本操作:
d1.push_back();//插入元素
d1.push_front();//插入元素
d1.pop_back();//删除元素
d1.pop_front();//删除元素
d1.erase(pos);//移除pos位置的元素,返回下一个数据的位置。
2.关联容器
特点:关联式容器都是有序的,升序排列或者自动排列等;
实现的是一个平衡二叉树,左子树的值小于根,右子树大于根;
(1)set/multiset:集合,其中所包含的元素是唯一的。
目的:快速检索,去重与排序;
特点:元素无重复(multiset允许有重复)、如果要修改元素值要先删除再插入新元素;
创建对象:
set<T>s//升序排列;
greater<T>s//降序排列;
基本操作:
s.size(); //元素的数目
s.max_size(); //可容纳的最大元素的数量
s.empty(); //判断容器是否为空
s.find(elem); //返回值是迭代器类型
s.count(elem); //elem的个数,要么是1,要么是0,multiset可以大于一
s.clear();//清除a中所有元素;
(2)map/multimap
针对问题:去重、清晰的一对一关系、打乱重新排列的问题。
特点:
map为单重映射,multimap为多重映射;
map存储的是无重复键值的元素对,而multimap
允许键值重复,一个key可以对应多个value;
map内部自建了一颗红黑二叉树,可以进行自动排序,所以map内的元素是有序的;
自动建立key-value关系,key和value可以是所需要的任何类型;
key和value的对应关系可以去重。
创建对象:
map<T1,T2> m;
map<T1,T2, op> m; //op为排序规则,默认规则是less<T>
基本操作:
m.max_size(); //求算容器最大存储量
m.size(); //容器的大小
m.insert(elem);
m.insert(pos, elem);
m.insert(begin, end);
m.at(key);
m[key];
m.count(key);
参考文章:https://blog.csdn.net/weixin_41588502/article/details/87978490?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164766235916782092971651%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164766235916782092971651&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-87978490.142v2pc_search_result_cache,143v4control&utm_term=STL%E5%AE%B9%E5%99%A8&spm=1018.2226.3001.4187