结构

成员变量有三个

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特性,且实际上相当于普通的数组指针

空间的扩增主要分两种情况:

  1. range_insert ,对于插入/构造的长度是确定的情况下使用( forward_iterator (可用std::distance)、指定count...),如空间不够,扩增的长度由 max(__n,this->size()) 决定(若构造时视 __n 为0),且次数最多为一
  2. insert ,对于插入/构造的长度不确定或者是单个元素,会逐个进行插入,其中可能会发生多次扩增,扩增的长度为 this->size() (若原先长度为0,则扩增1)

其他重要函数结构

  1. pop_back
  2. erase
  3. []
  4. at
  5. begin/end/rbegin/rend/front/back
  6. swap