vector容器

一、vector概述

vector是动态连续空间,支持随机存取,迭代器的类型是Random Access Iterator。所以它支持下标访问。

二、vector的实现原理

1.vector动态空间的实现
当vector当前的空间被充满时,如果还想要插入元素,那么必须扩充空间。扩充空间的过程是:首先在内存里面找到当前vector容量两倍的空闲的连续空间。然后进行配置空间、数据移动、释放旧空间的大工程。重新配置空间的时间成本很高,所以系统按两倍的方式扩充。

2.vector的定义与常用的函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、vector的迭代器

因为vector维护的是一个连续的线性空间,所以不论其元素类型为什么,普通指针都可以作为vector的迭代器而满足所有必要条件,因为vector迭代器所需要的操作行为是:operator*,operator->,operator++,operator–,operator+,operator-,operator+=,operator-=。普通指针天生就具备了。vector支持随机存取,而普通指针也有这样的能力,所以,vector迭代器的类型是Random Access Iterator。
在这里插入图片描述

四、vector的数据结构

在这里插入图片描述

五、vector的构造与内存管理

1.vector元素的插入
当vector需要插入一个元素时,首先要调用一个函数:construct()函数。这个函数调用了placement new,就是首先将要插入的元素分配一个空间,然后将这个元素插入到p开始的空间里面去。

placement new的用法
在这里插入图片描述

push_back和emplace_back的区别

在这里插入图片描述
在这里插入图片描述
注意:当vector的空间进行扩容之后,调用pop_back()这样的函数时,尽管容器里面的元素会减少,但是vector容器的容量不会改变

3.vector容器的其它操作
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值