基础结构和算法
简单的std接口使用 http://www.cnblogs.com/CnZyy/p/3317999.html
根据上述连接实际操作一下,会发现不同的std容器提供很多类似的操作接口,因此初接触者必然有疑惑:数组的情况,要用vector,list 还是 deque, 哈希表的情况,要用 map还是hash_map,什么时候又应该用 set/hash_set.
1. vector , list, deque 的区别http://blog.csdn.net/jiangxinyu/article/details/3109982
简单来说,需要知道不同容器底层是怎么实现的,vector 是连续内存,因而[]操作符很快,但中间插入和删除很慢,因为需要移动。 list 是链表,所以特点与vector相反; deque 具体实现不明,其[]操作跟vector效率差不多, 头尾插入和list差不多
2. set , map, multiset, mulitmap, hash_set, hash_map, hash_multiset, hash_multimap
http://blog.csdn.net/v_july_v/article/details/7382693
也一样是由于底层容器的实现不同而呈现不同特点,set/map 底层用R-B树实现,所以,无论数据是设么样的特点,都拥有稳定的查找、插入、删除性能:O(lgn). hash_set/hash_map 底层用哈希表实现,因而对于合适的数据集和合适的哈希函数(结果就是冲突率很小),其插入、删除和查找都非常快(O(1)),但是冲突率搞的情况下,效率下降很快。带multi-的是允许key值重合的情况。另外,map是二值关系<key,value>,根据key的特点组织R-B树或者哈希表,而set是一值的,其值本身是组织R-B树和哈希表的key,同时也是要存放和查询的值
3 (queue stack)和(deque list) 的区别
http://blog.csdn.net/zh634455283/article/details/7767517
queue、stack 这些都是比较简单的实现,没有iterator , deque 、list 实现了更丰富的接口