【笔记】各种容器的特点
STL中基本容器有:string、vector、list、deque、set、map
set和map是无序的保存元素(关联容器)。只能通过它提供的接口访问元素。
set:集合。用来判断某个元素是否在一个组里。
map:地图。把一个值映射成另一个值。查找、遍历效果不错。
因为底层多用平衡二叉树实现,所以插入时效率有一定影响。
string、vector、list、deque、set是有序容器(顺序容器)。
string:字符串。
访问元素效率高:因为内存连续存放。
插入效率:尾端操作快;中间操作时会进行内存复制,慢。
删除元素:并不会立即释放内存,为了下次使用更加高效。
内存分配:在堆中分配,有保留内存,所以大量使用时会有内存浪费。
支持随机存取。
vector:向量/动态数组。
访问元素效率高:因为内存是连续的而且起始地址不变。
插入删除:尾端操作快;中间操作需要移动内存,如果牵扯结构体或类,还要构造和析构,性能不高。
内存分配:在堆中分配,有保留内存。
支持随机存取
list:双向链表。主要通过迭代器访问。
访问元素效率低:因为是通过遍历指针来进行访问,内存空间可以不连续。
但是双向链表,首尾访问还是比较快的。
插入删除:效率高!这是链表的一个特点。删除时不存在内存拷贝问题,也没有构造析构问题。
内存分配:在堆中分配。没有预留内存,增加时分配、删除时释放。
不支持支持随机存取!
备注:如果添加大内存元素用list比较好!
deque:双端队列。
访问元素速度高:是一个一个的堆,每个堆保存几个元素,堆与堆之间用指针链接。
支持随机存取。 (像是vector与list的结合)
set:集合。
set和multiset是一个按用户指定规则将数据进行排序的集合库。
set不允许有相同的数据;multiset允许有重复数据。
map:字典。
map或multimap是一个按用户指定规则将数据进行排序的集合库,索引类型由用户指定。
map不允许有相同数据;multimap允许有重复数据。
参考资料:网络