STL之vector容器

vector容器是一种类似于数组的容器,主要差别是vector可以实现自增长;
在对于vector容器调用resize函数时,形式为resize(N,val),STL会先判断当前的元素size个数是否大于要调整的大小N,如果大于,则直接将大于N的那部分元素擦除(调用erase函数),capacity不变;
如果小于,则会在当前的最后一个元素后边添加”N-size“个val值,这时capacity会视剩余容量大小来改变;

插入元素的空间配置:
注意vector的初始容量大小是0,当进行插入元素时,如果是第一次插入,会发现当前容量大小为0,则会先开辟一个元素的空间,然后再插入的时候如果发现空间不够,则开辟原来空间的两倍大小;
同时,因为STL的空间配置不是完全都会成功的,所以STL在每次分配空间时,会catch错误,保证错误在本函数内消化,不向上传播。

总的来说,vector的插入元素会出现三种情况:
1):如果当前剩余的容量足够插入元素,则判断插入元素的位置后边的元素数量elemNum与将要插入的元素数量N进行对比,如果elemNum < N,
则第一步:会先在容器的末尾处插入N-elemNum个元素,第二步:然后改变finish指针,第三步:将elemNum个原来的元素copy到finish指针后边,
第四步:重新更新finish指针,第五步:将elemNum个val插入值放进容器的空洞中;
2):如果当前剩余的容量足够插入元素,则判断插入元素的位置后边的元素数量elemNum与将要插入的元素数量N进行对比,如果elemNum > N,
则第一步会将后边的elemNum元素向后移动N个空格,第二步:更新finish指针,第三步:用插入值val填充容器的空洞(这个具体操作是分四步,但是总体是这么个移动法);
3):如果当前剩余的容量不够插入元素,则重新配置空间,分为四步:第一步:先将插入位置前边的所有元素复制到新的空间,第二步:填充N个val到新的空间;第三步:拷贝position后边的元素到新的空间;
第四步:销毁原来的空间;

erase元素的操作:
擦除元素是使用了类似于狸猫换太子的方法,将擦除位置以后的所有元素向左移动一格,这样目标擦除位置的元素也就不见了;所以erase函数返回position也就指向了被擦除元素的下一个位置;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值