赞
踩
手撕vector目录:
2.2 vector的拷贝构造和赋值重载(赋值重载不是构造哦,为了方便写在一起)
本篇的目的很简单,只有一个:模拟实现vector
如何去模拟实现?我们可以看看vector的源码,我们可以抽离出主体框架:
- namespace lzy//防止命名冲突
- {
- template<class T>
- class lzy_vector
- {
- public:
- typedef T* iterator;
- typedef const T* const_iterator;
- public:
- //成员函数
- private:
- T* _start;
- T* _finish;
- T* _end_of_storage;
-
- }
- }
对于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的模拟实现大概有了一个基本的框架,话不多说,直接进入主题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。