vector,deque,list,map,数组比较与分析

vector:
为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高.
deque:
为存储的对象分配一块连续的地址空间,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾.

vector和数组区别:
vector是个容器,array不是
vector可以知道自己的大小,array不知道
vector可以变大变小,这里变小指的是元素数目,array不能变大变小
数组在内存中分配的连续空间,多次分配释放后会有内存碎片,
vectors内存是连续的地址空间动态增长的,当前的容量(capacity)不足就申请一块当前容量2倍的新内存空间,然后将所有的老元素全部拷贝到新内存中,添加大量元素的时候的花费的惊人的大.
还有vector的迭代器能防止出现类似数组愈界,所以vector更加安全,健壮 等等
效率上我认为数组更高一点,数组只是一个基本类型,少了vector 的封装,少了构造函数和析构函数这些操作


vector和deque的相同点
1.顺序容器
2.为动态一维数组
3.在中间位置插入和删除操作时间复杂度为O(N);
4.可以快速随机访问元素
不同点:
1.vector支持push_back, pop_back操作; deque支持push_back, push_front, pop_back, pop_front操作;
2.vector的push_back, pop_back操作时间复杂度为O(1), 头部插入和删除操作时间复杂度为O(N);deque的push_back, push_front, pop_back, pop_front操作时间复杂度为O(1);
3.vector为连续的存储空间; deque的存储空间为页面或块;
4.vector预留存储空间;deque不预留存储空间.

vector,list区别
vector适用:对象数量变化少,简单对象,随机访问元素频繁
list适用:对象数量变化大,对象复杂,插入和删除频繁
最大的区别是,list是双向的,而vector是单向的。

list和map的区别:
list底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢。
list 的push_back, push_front, pop_back, pop_front操作时间复杂度为O(1),查找的话需要通过迭代器编译 时间复杂度是O(n)
map 的内部实现是RB-tree 红黑二叉树 插入和删除的时间复杂度是O(LOG2N)

1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值