【笔记】各种容器的特点

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允许有重复数据。

 

 

 参考资料:网络

 

posted @ 2012-03-21 16:52  醪糟汤圆  Views(302)  Comments(0Edit  收藏  举报