STL 容器
序列式容器(Sequence containers),此为可序群集,其中每个元素均有固定位置—取决于插入时机和地点,和元素值无关。如果你以追加方式对一个群集插入六个元素,它们的排列次序将和插入次序一致。STL提供了三个序列式容器:向量(vector)、双端队列(deque)、列表(list).
关联式容器(Associative containers),此为已序群集,元素位置取决于特定的排序准则以及元素值,和插入次序无关。如果你将六个元素置入这样的群集中,它们的位置取决于元素值,和插入次序无关。STL提供了四个关联式容器:集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)。
vector
可以看做可扩展的数组,末端可扩展,且末端插入快
需要include<vector>
deque
可以看做可双向扩展的vector
需要#include<queue>
list
双向链表,在内存中不连续存储。所以插入删除快,但不支持随机访问。
需要#include<list>
set
用红黑树实现,自动排序,元素不重复。
需要#include<set>
,multiset
也是
multiset
可以有重复元素
map
用红黑树实现,自动排序,元素不重复。
需要#inlcude<map>
,multimap
也是
multimap
可以有重复元素
用法
都能用迭代器遍历
各个容器用法差不多,下面以vector
为例
1 | //创建 |
map
,set
的插入用insert
1 | // 第一种 用insert函數插入pair |
list
,queue
支持头部插入,用push_front()
可以使用sort()
进行排序
merge()
将两个容器合并,合并成功后会按从小到大的顺序排列;
如:lt1.merge(lt2);
lt1容器中的元素全都合并到容器lt2中。
splice()
函数也是合并,可以指定合并位置,但是不自动排序
资料
https://www.w3cschool.cn/cpp/cpp-i6da2pq0.html
https://www.cnblogs.com/linuxAndMcu/p/10254542.html
https://blog.csdn.net/sevenjoin/article/details/81943864
https://blog.csdn.net/weixin_41588502/article/details/87978490