摘要:本篇文章深入探讨了C++ STL中的vector容器,对其进行了深层挖掘和模拟实现。文章详细解析了vector的内部机制,包括其动态数组的实现方式、内存管理以及性能优化等方面。通过模拟实现,让读者更好地理解vector的工作原理,从而在日常编程中更加熟练地运用这一强大的容器。本文是C++初阶学习的第九弹,对于STL的奥秘进行了进一步的揭示。
字符串(上):C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类-CSDN博客
字符串(下):C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现-CSDN博客
矢量(上):C++初阶学习第八弹——探索STL奥秘(三)——深入剖析vector的使用-CSDN博客
前言:
在前面,我们已经学习了string的使用及其模拟实现,并且也学习了vector的使用,我们将深入学习vector的模拟实现。
目录:
vector的基本成员变量
vector的逐步实现
1、构造和销毁
2、迭代器相关
3、容量相关
4、元素访问
5、vector的修改操作
一、vector的基本成员变量:
我们之前已经学习了vector的使用,因此对其机制已有基本了解,我们来看一下vector工作的基本机制。
从图中可以看出,vector的操作机制实际上是通过三个指针来实现的:_start、_finish、_endOfStorage,vector的基本成员变量为:
template<typename T> class vector { private: T* _start; //指向有效数据的头 T* _finish; //指向有效数据的尾 T* _endOfStorage; //指向容量的尾 };
由于vector的本质上与顺序表很相似,只是存储的数据上更加多元化,因此我们可以对基本成员做一些调整,将其改成迭代器相关的,方便我们后面写类成员函数。
二、vector的逐步实现:
构造和销毁:
构造的方法主要有五种:默认构造、构造同时将前n个初始化、迭代器构造法、拷贝构造、operator=运算符重载。
迭代器相关:
迭代器是找到头尾的主要方式,相关函数为:begin()、end()、cbegin()、cend()。
容量相关:
容量相关的最重要的是扩容,即reserve函数,我们也需要关注resize函数,它既可以扩容,也可以缩容,同时还可以初始化。
元素访问:
元素访问的关键是运算符重载(operator[]),由于我们定义的类成员变量是指针形式的,因此很容易实现这个重载。
vector的修改操作:
vector的修改操作最关键的是insert函数和erase函数,即在任意位置插入和删除,尾插尾删可以直接调用这两个函数来实现。
三、
上面的代码段是vector的模拟实现的全部内容,除此之外,还有vector复制等细节没有详细讲解,感兴趣的可以关注下一篇文章,我们将讲解这些细小知识点,感谢各位的阅读和支持!如果您觉得这篇文章对您有帮助,请点赞关注! 😊 感谢您的阅读!如果您有任何问题或建议,请随时与我联系。
还没有评论,来说两句吧...