vector的特点:
动态数组,内存连续,以2倍的方式进行扩容,reserve、resize
在新的内存上拷贝构造新的对象,再把老内存上的对象析构,释放内存,扩容的效率很低
deque的特点:
是一个动态开辟的二维数组空间,第二位是固定长度的数组空间,扩容:第一维的数组进行2倍扩容
deque底层内存是否是连续的???
并不是全部连续的,是分段连续,每一个第二维是连续的
vector和deque之间的区别:
1、底层结构不一样:vector的底层是一段内存连续的动态数组,而deque则是一个动态开辟的二维数组
2、前中后插入删除元素的时间复杂度不一样:中间和末尾都是O(1),前 deque是O(1),vector是O(n)
3、对内存的使用效率:
vector的使用效率较低,vector要求内存空间必须连续,而deque可以分块进行数据存储,不需要内存空间必须连续
在中间进行插入和删除,vector和deque哪个效率更高??
由于deque的第二维内存空间不是连续的,所以在deque中间进行元素的insert或者erase,造成元素移动的时候比vector慢
vector和list的区别:
1、底层结构:vector的底层是一块内存连续的动态数组,而list是一个双向循环链表
2、vector:增加删除O(n) 查询O(n) 随机访问O(1)
list:增加删除O(1)(需要考虑查询,查询O(1)) 随机访问O(n)