成员变量有三个
typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
pointer;
struct _Vector_impl_data
{
pointer _M_start; // 后文代称start
pointer _M_finish; // ptr
pointer _M_end_of_storage; // end
作用如字面意思,代表内存空间的开始、下一个空闲的slot、内存空间的结束(开的)
默认构造函数下所有指针都为 nullptr
,没有初始分配的空间
(注意:由于c++没有实现类似于realloc的内存分配函数,所有的扩增都是先进行 allocate
分配出新空间,复制,再析构原来的所有元素并释放)
空间总是连续的,其迭代器满足forward_iterator
特性,且实际上相当于普通的数组指针
空间的扩增主要分两种情况:
range_insert
,对于插入/构造的长度是确定的情况下使用( forward_iterator
(可用std::distance)、指定count...),如空间不够,扩增的长度由 max(__n,this->size())
决定(若构造时视 __n
为0),且次数最多为一
insert
,对于插入/构造的长度不确定或者是单个元素,会逐个进行插入,其中可能会发生多次扩增,扩增的长度为 this->size()
(若原先长度为0,则扩增1)