vector的增长方式以及与list、deque的区别

一、vector概述及增长方式

vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素;vector与array的唯一区别就是空间运用的灵活性,array是静态空间,一旦配置就不能改变。

vector的实现技术在于其对大小的控制以及重新配置时的数据移动效率。

vector有三个迭代器:iterator start 

iterator start;             //表示目前使用空间的头,
iterator finish;            //表示目前使用空间的尾
iterator end_of_storage;    //表示目前可用空间的尾

当用push_back()将新元素插入vector的尾端时,首先检查是否还有备用空间,如果有就直接在备用空间构造元素,并调整迭代器finish,使vector变大;如果没有,就扩充空间(重新配置、移动数据、释放原空间)。

vector一般是以原大小的两倍另外配置一块交大的空间,然后将原内容拷贝过来,开始在原内容之后构造新的元素,并释放原空间。对vector的任何操作,一旦引起重新配置,指向原vector的所有迭代器就都失效了。

二、vector、list、deque的区别

vector是单向开口的线性连续空间,为存储对象分配一块连续的地址空间,对vector的元素随机访问效率很高。

list是非连续的内存区域,通过一对首尾指针双向连接起来从而允许向前和向后两个方向进行遍历,list中的对象是离散存储的。

deque是双向开口的连续线性空间,双向开口,即是在头尾两端分别做元素的插入与删除操作。deque允许在常数时间内对起头端进行元素的插入与删除操作,并且deque没有容量的概念,它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。

vector内部使用顺序存储,访问速度较快,但是删除数据比较耗费性能。list内部使用链式存储,访问速度慢,但是删除数据较快。

一般遵循以下的原则:

(1)需要高效的随机存取,而不在乎插入与删除的效率,使用vector;

(2)需要大量的插入与删除,而不关心随机存取,则应使用list;

(3)需要随机存取,且关心两端数据的插入与删除,应使用deque;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值