中关村在线

软件

C++ vector 简明指南

vector 是 STL 中常用的顺序容器,支持随机访问元素。其底层采用连续的内存空间存储数据,结构上与数组非常相似。关键区别在于内存分配方式:数组在定义时大小固定,无法改变;而 vector 采用动态内存分配,能够根据元素的增加自动扩展容量。当插入新元素导致空间不足时,vector 会按特定策略重新分配更大内存,并将原有数据迁移,从而实现容量的动态增长,使用更加灵活方便,兼顾效率与扩展性。

1、 向量简介

2、 vector是STL中常用的顺序容器,支持随机访问元素。其底层采用连续的内存空间存储数据,结构上与数组类似。不同之处在于,数组在定义时大小固定,无法更改;而vector则采用动态内存分配机制,能够根据元素的插入自动调整容量。当现有空间不足时,vector会按照特定策略重新分配更大的内存块,并将原有数据迁移过去,从而实现容量的自动扩展,使用更加灵活便捷。

3、 vector的扩容机制采用当前容量的两倍方式进行增长。由于vector使用连续的内存空间存储元素,每次扩容并非在原有内存基础上直接延伸,而是重新申请一块更大的内存空间,将原容器中的所有元素逐一复制到新空间中,随后释放旧的内存区域。这一过程导致原有的内存地址失效,因此之前指向旧内存的迭代器将不再有效,在进行插入等操作后必须及时更新迭代器,以避免访问已释放的内存,确保程序正确运行。

4、 vector的内部结构为动态数组

5、 vector数据结构使用连续的线性内存空间进行存储,属于顺序存储结构。通过三个迭代器_First、_Last和_End分别指向已分配内存空间的不同位置,用以管理当前使用范围和总容量。这三个迭代器在源码中定义为成员变量,用于高效控制容器的动态扩展与元素访问。

6、 _First 指向已用空间的起始位置,_Last 指向已用空间末尾,即当前元素数量的边界,_End 则指向整个分配容量的末端,表示可容纳元素的最大范围。

7、 初始化vector时,其容量设为6,恰好容纳data中的六个元素。当插入第七个元素6时,vector触发自动扩容机制,重新分配更大内存空间,并将原有数据迁移至新结构,具体存储布局1所示。

8、 当向vector中插入第7个元素6时,容器检测到当前存储空间已满,无法容纳新元素。为解决这一问题,vector自动分配一块新的内存空间,容量扩展为原来的两倍,即12个单位。随后,将原有6个元素逐一复制至新空间的前部位置,并在末尾插入新元素6。此时,容器的实际元素数量变为7,逻辑大小随之更新。其中,_Last迭代器指向最后一个有效元素所在位置,而_End迭代器则指向整个分配空间的末尾地址。通过调用size()成员函数可获取当前元素个数,结果为7;调用capacity()函数则返回当前总容量,值为12,反映出扩容后的存储能力。

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具