23. STL::deque、vector、list对比

deque:双端队列容器!
底层是2倍扩容的动态数组!

动态开辟的二维数组,一维数组从2开始,以二倍的方式扩容!每次扩容后,原来的第二维从新的第一维数组oldsize/2开始存放,上下都预留空行,方便支持deque的首位元素添加!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
deque<int> deq;
deq.push_back(20);从末尾添加元素O(1)
deq.push_front(20);从首部添加元素O(1)
vector从首部添加:vec.insert(vec.begin(),20) O(n)
deq.insert(it,20)O(n)
deq.pop_back()从末尾删除O(1)
deq.pop_front()从首部删除元素O(1)
deq.erase(it);O(n)
查询搜索:
iterator(连续insert、erase一定要考虑得带起失效的问题)

list:链表容器
底层:双向的循环链表
list<int> mylist;
mylist.push_back(20);从末尾添加元素O(1)
mylist.push_front(20);从首部添加元素O(1)
mylist.insert(it,20)O(1)不涉及移动,只涉及遍历链表(效率慢)
mylist.pop_back()从末尾删除O(1)
mylist.pop_front()从首部删除元素O(1)
mylist.erase(it);O(1)
在这里插入图片描述
deque和list比vector多出来的增加删除函数接口:push_front和pop_front,

vector和list之间的区别?

vector特点:
动态数组,内存连续的,2倍的方式进行扩容,vector<int> vec;//扩容0-1-2-4-8

deque特点:动态开辟的二维数组空间,第二维是固定长度的数组空间,扩容的时候(第一维的数组进行2倍扩容)

面经:
deque底层内存是否连续?
不是的,每一个第二维是连续的(分段连续!)

vector和deque之间的区别?
解答:

  1. 底层数据结构:
  2. 前中后插入删除元素的时间复杂度:中间和末尾O(1),前deque O(1),vector O(n)
  3. 对于内存的使用效率:vector低,需要的内存空间必须是连续的!而deque的二维数组是独立new出来的!只要有一段连续的第二维大小的块,就可以分配成功!
  4. 在中间insert或者erase,vector和deque的效率谁能好一点?:vector
    由于deque的第二维内存空间不是连续的,所以在deque中间进行元素的insert或者erase,造成元素移动的时候比vector要慢!O(n)

vector和list之间的区别:
vector底层是数组,list底层是双向循环链表
数组:增减删除O(n),查询O(n),随机访问O(1)
链表:增加删除O(1),查询:O(n)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值