gcc版本: gcc 2.95.3
篇幅原因,这里先看一部分源码
vector
template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
class vector : protected _Vector_base<_Tp, _Alloc>
{
private:
typedef _Vector_base<_Tp, _Alloc> _Base;
public:
typedef _Tp value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type* iterator; //迭代器
typedef const value_type* const_iterator;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef typename _Base::allocator_type allocator_type;
allocator_type get_allocator() const {
return _Base::get_allocator(); }
...
vecotr 本身其实是没有任何数据的
从这可以看出 vector 实际上是继承了 另一个类.
_Vector_base 类 的数据部分
protected:
_Tp* _M_start;
_Tp* _M_finish;
_Tp* _M_end_of_storage;
也就是说一个未初始化的vecotr 只有三根指针.
_M_start: 表示目前使用空间头
_M_finish: 表示目前使用空间尾
_M_end_of_storage: 表示目前可用空间的尾
解释一下空间的终止指针:
vecotr 的大小一共两个,一个元素的个数 —size()
另一个是 vecotr锁分配的空间的大小 --capacity()
如图: