STL源码阅读总结从小白到大神:vector

发布时间:2024年01月11日

一、vector概述

vector的数据格式与array非常相似,两者的差别在于空间的灵活运用,array是静态空间,一旦配置内存空间就不容易更改原来的空间大小。而vector是动态空间,随着元素的加入,它的内部机制就会自动扩容以容纳新元素的加入。
vector的实现技术关键在于对大小的控制以及重新配置时数据移动的效率。如果每增加一个元素,其空间只增大一个是十分不明智的选择,因为对于配置空间、数据移动、释放旧空间时间成本都是高的,下面文章内容中就会讲解它扩容的具体机制。

二、vector 源码定义

使用vector应包括头文件,但是SGI将vector的实现代码写在了更底层的<stl_vector.h>
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、vector的迭代器

vector维护的是一个连续性的空间在这里插入图片描述
即创建vector容器是什么类型的,其迭代器就是什么类型,比如vector::inerator iv;
iv的类型就是int。

四、vector的数据结构

在这里插入图片描述
一般为了降低空间配置时的时间成本,vector的实际配置大小可能比客户端需求量更大一些,以备将来可能的扩充,这便是容量的概念。
在这里插入图片描述
在这里插入图片描述
将容量扩大为当前容量的两倍可以更好地平衡内存使用和性能。(配置器中内存池的扩容)

五、vector的构建与内存管理:constructor,push_back

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

ps:动态增加大小,并不是在原空间之后接续新空间(因为无法保证在原空间后面还有可供提供的内存空间),而是以原大小空间的两倍在配置一个空间,将原内容拷贝过来,并释放掉原来的内存空间。因此空间重新配置后,原本的迭代器就失效了(原来指向的空间释放掉了)。

五、vector元素的操作:pop_back、erase、clear、insert

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/Rain_ZZX/article/details/135530868
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。