STL Contianers容器精辟总结
STLContianers容器精辟总结
一、序列容器(Sequence containers)
1、 Vector :一种序列容器,实现为动态数组,元素保存在连续的存储位置,支持迭代器和索引访问。与数组不同的是,可以自动分配存储空间,容易改变容器大小。当需要频繁从序列尾部增加或者删除数据时,可以表现出高效的性能。size记录了当前容器大小,capacity记录了当前已分配的最大空间。
2、 List:一种序列容器,实现为双向链表。与其他容器如vector和deques相比,list在容器内部插入、删除元素操作中性能更好。主要缺点是不支持元素直接按索引访问,需要迭代遍历。
3、 Deque:全称为 double-ended queue,即双端队列,支持元素按照索引访问,双向迭代遍历,元素可以被高效从前端或者后端增加和删除。与vector相比,增加了从前端增删元素的操作。缺点是不保证所有元素分布在连续的存储空间。尽管vector和deque提供的接口相似,但是工作原理不同,前者是动态分配连续空间的数组,后者的元素可以分块存储,有专门的类来保存信息,并提供统一访问。由于避免了反复重新分配空间,deque在处理大的序列时更加高效。
二、容器适配器(Container adaptors)
1、 Queue:一种容器适配器,实现为FIFO队列,注意后端push元素,前端pop元素。
2、 Priority queues:优先权队列,容器适配器,与数据结构”堆”相似,第一个元素总是最大元素。从后端pop和push元素。
3、 Stack:LIFO栈,容器适配器,从后端即栈顶pop和push元素。
三、 关联容器(Associativecontainers)
1、 Bitset :一种保存bit即0或者1,True或者False的容器。与数组相似,但是每个元素只分配一个位保存,只有C++中char空间的八分之一。支持元素直接按索引访问。
2、 Set:关联容器,存储有序(一般为升序)且唯一(与mutiliset对比)的元素,实现为二叉搜索树,元素的value就是key(与map对比)。unordered_set实现了无序set。
3、 Multiset:与set性质类似,只是允许出现重复元素。
4、 Map:关联容器,保存<Key,Value>对,同样保持有序,一般为升序,支持按照key来访问元素,key不允许重复。unordered_map实现了无序map。
5、 Multimap:与map性质类似,但是允许不同元素的key相同。
四、各容器成员函数一览图
参考资料 http://www.cplusplus.com/reference/stl/