STL库vector模拟实现

vector的核心成员

T* _start, T* _finish,T* _end_of_storage,分别是指向第一个有效元素,最后一个有效元素的下一个位置,可容纳元素中最后一个元素的下一个位置。当_start== _finish时,有效元素个数为0

vector的扩容策略

单增一个有效元素导致的扩容就采用倍增的方法,如:reserve(capacity()==0 ? 4: 2*capacity()),扩容后肯定符合要求,而对于一次添加很多的元素导致的扩容,因为扩二倍也不一定够,所以按要添加的元素个数来扩容

vector的常用方法

构造函数:

默认构造函数,三个指针全为nullptr

vector会设置n个有效元素,第二个参数是n个有效元素的赋值对象,其缺省值是匿名对象,所以如果元素是内置类型,那么该缺省值还会起到一个初始化内置类型的作用

利用vector的迭代器vector::iterator初始化vector

拷贝构造

size

返回有效元素个数

capacity

返回元素容量个数

resize

设置vector的元素个数为n,如果n小于当前有效元素个数,那就截断,如果n大于当前有效元素个数,那就新增有效元素用val来赋值,之前的有效元素不受影响

reserve

如果n小于等于当前vector的元素容量个数,那就什么都不做,如果n大于当前vector的元素容量个数,那就vector扩容致n个元素的容量

operator

返回下标为n的元素的引用

push_back

增加一个有效元素,用val来进行赋值

pop_back

删除末尾的有效元素,元素容量不变

insert

在一个位置插入元素,该过程伴随着因移位所带来的大量元素赋值,元素赋值就要深拷贝,最后返回插入的元素的迭代器

在指定位置插入n个有效元素,每个有效元素会被赋值val,进行深拷贝,同时移位也会导致很多的元素赋值,这些都是深拷贝,消耗很大

erase

删除一段迭代器区间,该区间左闭右开,返回值是最后一个删除元素的下一个位置的迭代器,可能指向一个有效元素,也可能指向end(),该函数同样是因为移位而导致大量的元素赋值,元素赋值是深拷贝,会有很多资源的创建和释放,消耗也很大

swap

vector的交换只需要交换各自成员变量即可

clear

元素容量个数不变,有效元素个数清零

emplace_back

emplace_back使用了c++11的万能引用,且是可变参数模板,可以根据传入的参数选用最合适的构造函数

vector模拟实现

vector模拟

相关推荐
博客18001 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴1 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨2 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
clint4566 天前
C++进阶(1)——前景提要
c++
夜悊6 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴6 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0017 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
LDR0067 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术7 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园7 天前
C++20 Modules 模块详解
java·开发语言·spring