前言
在模拟实现 vector 过程中,有很多细节需要处理。
vector——基本模型
首先自定义一个 vector 类,放在自定义的命名域中,给定相应的成员以及函数,包括默认成员函数和自定义变量。下面是 vector 最初始的样子,只有自定义成员变量:
namespace xxx {
template<class T>
class vector {
public:
typedef T* iterator; // 因为 vector 会支持迭代器访问,所以我们这里定义 T*
private:
iterator _start = nullptr; // _start , _finish 相当于 vector 的开头和末尾的指针
iterator _finish = nullptr;
iterator _end_of_storage = nullptr; // 这个代表边界 vector 的容量边界
};
}
vector——迭代器模拟实现
vector 支持迭代器访问,我们先来简单实现一下迭代器:
// 指向数据不能修改,本身可以修改
typedef const T* const_iterator;
iterator begin() { return _start; }
iterator end() { return _finish; }
const_iterator begin() const { return _start; }
const_iterator end() const { return _finish; }
vector——容量函数以及 push_back、pop_back
实现 reserve(扩容)函数、resize(控制 size)、push_back 以及 pop_back:
size_t size
{
_finish - _start;
}
{
_end_of_storage - _start;
}
{
(n > ()) {
oldSize = ();
T* tmp = T[n];
(tmp, _start, (T) * oldSize);
[] _start;
_start = tmp;
_finish = _start + oldSize;
_end_of_storage = _start + n;
}
}
{
(n < ())
{
_finish = _start + n;
}
{
(n);
(_finish != _start + n)
{
*_finish = val;
++_finish;
}
}
}
{
(_finish == _end_of_storage)
{
(() == ? : () * );
}
*_finish = x;
++_finish;
}
{
(_finish > _start);
--_finish;
}


