关于STL的一些东东:
1,除了引用类型,所有内置或复合类型都可用作容器的元素类型。因为引用不支持一般意义上的复制运算。
可以被作为容器的元素的类型,必须具有以下两点特征:
(1)可赋值;
(2)可复制。
2,容器类型分类:
(1)顺序类型:vector , list , deque , stack(容器适配器) , queue(容器适配器) , priority_queue(容器适配器)。
【1】
标准容器类 | 特点 |
---|---|
vector | 支持快速随机访问,动态数组,通过reserve()可管理内存,需注意迭代器失效的情况、区分size和 capacity的值 |
list | 双向环状链表,不能随机访问,支持双向遍历,增加元素迭代器不失效,删除元素,除了被删的,都不失效,高效的插入和删除操作 |
deque | 双向开口的连续线性空间,没有容量的概念,支持随机查找(复杂度O(1) ),不提供内存管理的函数,可在前后添加元素。 |
【2】
适配器 | 特点 |
---|---|
stack | 堆栈,一般使用deque作为支持的序列容器,FILO,不可遍历 |
queue | 队列,一般使用deque作为支持的序列容器,FIFO,不可遍历 |
priority_queue | 优先队列,底层使用vector,只能访问第一个元素(优先级最高),不可遍历 |
(2)关联容器:通过key值来存储和读取元素。分为:map , multimap , set , multiset , unordered_map,unordered_set。
注意:map , multimap , set , multiset 都是用红黑树实现的。而unordered_map,unordered_set使用的是Hash实现。
区分map和set:
map:所有元素依照键值排序,pair中的第一个元素是键,第二个元素为实值。迭代器不失效,除了被删除的那个迭代器。
set:所有元素依照键值排序,键值与实值统一。迭代器不失效,除了被删除的那个迭代器。