1.vector底层数据结构为数组,支持快速随机访问
vector是一段连续的内存块
vector是在尾部插入和删除元素,算法时间复杂度为O(1),常数阶,其他元素的插入和删除为O(n)线性阶。
适合高效的随机存储
可以动态的调整元素占用的空间
初始化
vector<类型> 对象; //创建对象
vector<类型> 对象(n); //创建对象并申请n个空间
vector<类型> 对象(n,m); //创建对象申请n个空间并赋初值为m
vector<类型> 对象(对象); //对象赋值初始化
vector<类型> 对象(起始位置,终止位置+1); //申请一个终止位置大小的对象
元素插入
insert(iterator pos,const T& x); //在pos的前面加入元素x
元素的删除
erase(iterator pos); //删除指定pos位置的元素
erase(iterator first,iterator last); //删除[first,last)之间的元素
元素的反向遍历
reverse_iterator rend(),m.rend()函数返回反向遍历的结束地址
reverse_iterator rbegin(),m.rbegin()函数返回反向遍历的首地址
vector的元素交换
m1.swap(m2);
调整vector数据空间的大小
reserve(大小); //需要调整为的大小
2.list底层数据结构为双向链表,支持快速增删
list的归并
splice(pos,list &x); //将x链表归并到pos位置之前,且清空list x。
splice(pos,list&,iterator i); //将一个list的迭代器i所指的元素,归并到当前的list的pos前一个元素,并将被归并的元素从原list中删除。
merge(list &x); //将list对象x归并到当前list,并清空list x。
merge函数在使用前必须是排好序的,且merge默认从小到大排序。
list的函数排序
l.sort(); // 默认从小到大排序
底层是链表,所以它对插入、删除元素性能是最好的,但是查询性能非常差
适合大量的插入和删除操作而不关心随机存储的要求
3.deque支持在首部和尾部快速插入,算法的时间复杂度为O(1)
多个连续的内存块
兼顾了数组和链表的优点,它是分块的链表和多个数组的结合,其比list查询性能好,比vector的查询性能差,比list的插入和删除性能差,比vector的好
需要随机存储和两端数据的插入和删除,dqueue最佳
4.stack底层一般用23实现,封闭头部即可,不用vector的原因是容量大小有限制,扩容耗时
后进先出,使用现有序列容器实现,默认使用双端队列deque实现
stack<int,list< int>> s;
入栈:push()
出栈:pop();
栈顶元素:top();并不删除元素
5.queue是一种先进先出表,线性存储,插入一端为队尾,删除一端为队首。默认使用双端队列deque来实现。
back(); //读取队尾元素
front(); //读取队首元素
6.45是适配器,而不叫容器,因为是堆容器的再封装
7.priority_queue的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
出队时是当前队列中的最大元素出队。
8.set底层数据结构为红黑树的平衡二叉检索树,有序,元素不重复
9.multiset 底层数据结构为红黑树,有序,元素可重复
10.map底层数据结构为红黑树,有序,不重复
11.multimap底层数据结构为红黑树,有序,可重复
12.hash_set底层数据结构为hash表,无序,不重复
13.hash_multiset底层数据结构为hash表,无序,可重复
14.hash_map底层数据结构为hash表,无序,不重复
15.hash_multimap底层数据结构为hash表,无序,可重复
16.slist单链表容器
insert_after(pos,const T& x); //在pos之后的位置插入元素x
17.bit_vector位向量容器
bit_vector容器的每个元素是一个bit位值,取0或者1。分配在以字为单位的连续字节快。
bit_vector v(10); //申请10个位的对象,每个bit默认是1;