定义初始结构:
vector定义了三个指针start(表示目前使用空间的头)、finish(表示目前使用空间的尾)、end_of_storage(表示目前可用空间的尾)。
template <class T>
class vector
{
public:
~vector()
{
delete _start;
_start = _finish = _end_of_storage = nullptr;
}
private:
T* _start; //顺序表的头
T* _finish; //顺序表有效长度位置
T* _end_of_storage; //顺序表末尾
};
容量有关操作:
1.获取有效数据大小size()
想要获取size,该怎么实现呢?我们在定义初始结构的时候,已经知道其底层是利用的三个指针,所以size等于_finish - _start
.
size_t size() const //加const是保证const对象也可以用
{
return _finish - _start;
}
2.获取数据容量capacity()
size_t capacity() //加const是保证const对象也可以用
{
return _end_of_storage - _start;
}
3.增加容量reserve()
首先判断请求的空间大小是否超过现有空间大小。然后是则进行一系列处理:
- 开辟新空间
- 将原有空间的数据一一移动到新空间上
- 释放原有空间
- 将三个指针重置
否