有序容器:
vector[连续内存]
拥有一段连续的地址空间,首地址不变,按顺序存放,拥有高效的随机存储和访问,毕竟有迭代器作为序号。
从尾部插入和删除很快,其他地方插入和删除操作的时间复杂度就高喽,需要大范围内存的复制粘贴,效率低下,就像数组一样.有空间预留的特点,操作起来消耗内存空间。capacity
所以,vector适用于:高效的随机存储、访问,低效的数据插入删除等操作。其它的操作的效率都谈不上,原因就在于当内存不够用的时候要执行重新分配内存,拷贝对象到新存储区,销毁old对象,释放内存等操 作,如果对象很多的话,这种操作代价是相当高的。为了减少这种代价,使用vector最理想的情况就是事先知道所要装入的对象数目,用成员函式 reserve( )预定下来;
deque[跳跃的连续内存]
拥有几段连续的内存空间,随机存储效率不错,介于两者之间。
从尾部插入和删除效率不错,另外头部可以添加和删除,也就是两端插入效率不错。介于两者之间
list[随机内存]
通过地址来访问,在内存中的位置不是连续的。无法高效的随机访问,只能快速地访问开头和结尾部分的数据,中间就需要遍历了。
任何地方插入、删除操作效率较高,通过指针。
无序容器:
map
1:1的关系。关联容器
set
数学里面的集合,不过set的集合中不包含重复的元素,这是和vector的第一个区别,第二个区别是set内部用平衡二叉树实现,便于元素查找,而vector是使用连续内存存储,便于随机存取。
原文地址:http://www.cnblogs.com/Mr-Dog/p/3747763.html