首页 > 代码库 > STL源码之vector

STL源码之vector

STL源码之vector

 

1. SGI的vector

SGI stl vector继承子一个基类:

template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
    class vector : protected _Vector_base<_Tp, _Alloc>

在基类中定义了基本的一些操作,并且封装了了vector所需要的基本的三个指针:

struct _Vector_impl
      : public _Tp_alloc_type
      {
    pointer _M_start;
    pointer _M_finish;
    pointer _M_end_of_storage;

     …

}

public:
      _Vector_impl _M_impl;

以_M_impl作为数据成员。

现在我们只在一个类中表达出相同含义。

 

2. vector基本含义

 template<typename _Tp, typename _Alloc = std::allocator<_Tp> >    class vector : protected _Vector_base<_Tp, _Alloc>    {     //必须的嵌套类型,必须包含iterator_traits中五个类型
  public: typedef _Tp value_type; typedef typename _Base::pointer pointer; typedef typename _Alloc_traits::const_pointer const_pointer; typedef typename _Alloc_traits::reference reference; typedef typename _Alloc_traits::const_reference const_reference; typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator; typedef __gnu_cxx::__normal_iterator<const_pointer, vector> const_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator; typedef std::reverse_iterator<iterator> reverse_iterator; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Alloc allocator_type;
  
  protect: