STL中各种容器效率
转自:http://cpluser.bokee.com/4105719.html
1.vector(动态数组)
vector支持随机存取。
vector在末端增加或删除元素时性能相当好,在前端或中部做以上操作则效率比较低,因为操作点以后的所有元素都需要移动到另外一个位置。因此,当要插入多个元素时,调用一次比调用多次效率快。
vector高效的原因在于配置了比其所容纳的元素更多的内存。内存重新配置会花很多时间。请关注capacity()成员函数。
2.deque(动态数组)
deque支持随机存取。
在deque的首端和末端插入和删除元素比较快,在中部插入和删除则比较慢。
deque的内存重分配性能比vector好。
3.list(双向链表)
list不支持随机存取。
list在任何位置安插和删除元素速度都比较快(双向链表)。
list的安插和删除操作不会使其他元素的各个pointer,reference,iterator失效。
4.set和multiset(平衡二叉树)
两者不支持直接存取元素的操作,因为是自动排序。
查找元素速度比较快。
不能直接改变元素值,否则会打乱原本正确的顺序。必须先下删除旧元素,再插入新的元素。
5.map和multimap(平衡二叉树)
基本同set。
根据已知的key查找元素速度比较快,根据value则比较慢。