当前位置:   article > 正文

【C++】手撕vector(vector的模拟实现)_c++手撕vector

c++手撕vector

手撕vector目录:

一、基本实现思路方针

二、vector的构造函数剖析(构造歧义+拷贝构造)

2.1构造函数使用的歧义问题

2.2 vector的拷贝构造和赋值重载(赋值重载不是构造哦,为了方便写在一起)

三、vector的基本接口

3.1empty和clear

3.2 size和capacity

3.3  [ ]和iterator

四、 resize和reserve

五、尾插尾删

六、迭代器失效

6.1 insert

6.2 erase

七、vector.h


一、基本实现思路方针

本篇的目的很简单,只有一个:模拟实现vector

如何去模拟实现?我们可以看看vector的源码,我们可以抽离出主体框架:

  1. namespace lzy//防止命名冲突
  2. {
  3. template<class T>
  4. class lzy_vector
  5. {
  6. public:
  7. typedef T* iterator;
  8. typedef const T* const_iterator;
  9. public:
  10. //成员函数
  11. private:
  12. T* _start;
  13. T* _finish;
  14. T* _end_of_storage;
  15. }
  16. }

对于size = _finish - _start

对于capacity = _endofstorage-_start

可以看到,vector 的底层和 string 一样,都是一个指针指向一块动态开辟的数组,但是二者不同的是,string 是用 T* str 和 _size 和 _capacity 三个成员变量来维护这块空间,而 vector 是用 _finish 和 _end_of_storage 两个指针来维护这块空间;虽然 vector 使用指针看起来难了一些,但本质上其实是一样的 : _size = _finish - _start, _capacity = _end_of_storage - _start;

 有了这些作为铺垫,我们对于vector的模拟实现大概有了一个基本的框架,话不多说,直接进入主题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/388357
推荐阅读
相关标签