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模拟

相关推荐
咖啡の猫3 小时前
Python字典推导式
开发语言·python
leiming64 小时前
C++ vector容器
开发语言·c++·算法
SystickInt4 小时前
C语言 strcpy和memcpy 异同/区别
c语言·开发语言
CS Beginner4 小时前
【C语言】windows下编译mingw版本的glew库
c语言·开发语言·windows
FJW0208144 小时前
Python_work4
开发语言·python
大学生资源网5 小时前
java毕业设计之儿童福利院管理系统的设计与实现(源码+)
java·开发语言·spring boot·mysql·毕业设计·源码·课程设计
JasmineWr5 小时前
JVM栈空间的使用和优化
java·开发语言
Poetinthedusk5 小时前
C#实现图片统一位深
开发语言·c#
吴佳浩 Alben5 小时前
Python入门指南(四)
开发语言·后端·python
一然明月6 小时前
QT之基础控件
开发语言·qt