您的位置:首页 > Web前端

SGI STL V3.2 源码剖析笔记-3. vector(未完待续)

2006-08-30 18:55 495 查看

1.             vector

1.1.              文件名

<bits/stl_vector.h>

1.2.              泛型参数

typename _Tp                    vector内放置的对象类型
typename _Alloc                底层的allocator,有默认值,如果设置了编译器选项__STL_USE_STD_ALLOCATORS,那么默认值为allocator< _Tp >,否则为alloc。allocator<_Tp>是一个STL stantdard allocator,而alloc是__default_alloc_template的特化版本,是一个SGI style allocator。

1.3.              base class: template _Vector_base

1.3.1.         泛型参数

typename _Tp                    管理的对象类型。
typename _Alloc                 底层的allocator

1.3.2.         说明

_Vector_base的作用是负责释放和分配内存。
_Vector_base的实现方法受编译选项__STL_USE_STD_ALLOCATORS影响:
如果设定了__STL_USE_STD_ALLOCATORS,那么_Vector_base的泛型参数_Alloc可以是bits/stl_alloc.h中定义的任何空间配置器,包括SGI style allocator和STL standard allocator。
如果没有设定__STL_USE_STD_ALLOCATORS,那么_Alloc必须满足__simple_alloc的泛型参数要求,即必须是SGI style的。
另外,_Vector_base对无状态的allocator做了优化,不记录无状态的allocator,节省了的空间。

1.3.3.         base class: template _Vector_alloc_base

如果设定了__STL_USE_STD_ALLOCATORS,才会继承自基类_Vector_alloc_base。

1.3.3.1.       泛型参数

typename _Tp                    管理的对象类型
typename _Allocator           底层赖以实现的allocator
bool _IsStatic                      _Allocator是否是无状态的

1.3.3.2.       Associated type

allocator_type

1.3.3.3.       接口

_Tp* _M_allocate(size_t __n)
void _M_deallocate(_Tp* __p, size_t __n)

1.3.4.         Assosiated type

1.3.4.1.       allocator_type

如果定义了编译选项__STL_USE_STD_ALLOCATORS ,那么它是_Alloc_traits<_Tp, _Alloc>::allocator_type,否则它就是_Alloc。

1.3.5.         接口

1.3.5.1.       _Tp* _M_allocate( size_t n )

    分配一块内存空间,大小为n*sizeof( _Tp )。

1.3.5.2.       void _M_deallocate( _Tp* p, size_t n )

    释放p指向的内存空间,n表示即将释放内存中_Tp的个数。

1.4.              Associated type

1.4.1.         value_type

_Tp

1.4.2.         pointer

value_type*

1.4.3.         const_pointer

const value_type*

1.4.4.         reference

value_type&

1.4.5.         const_reference

const value_type&

1.4.6.         size_type

size_t

1.4.7.         defference_type

ptrdiff_t

1.4.8.         allocator_type

_Base::allocator_type

1.4.9.         iterator

value_type*

1.4.10.    const_iterator

const value_type*

1.4.11.    reverse_iterator

reverse_iterator<iterator>

1.4.12.    const_reverse_itetator

reverse_iterator<const_iterator>

1.5.              接口

1.5.1.         explicit vector( const allocator_type& _alloc = allocator_type() )

创建一个大小、容量均为0,allocate为_alloc的vector。

1.5.2.         vector( size_type n, const value_type& value, const allocator_type& __a = allocator_type() )

创建一个大小、容量均为n,allocator为__a的vector,其内元素全部被初始化为value。
它调用算法uninitialized_fill_n初始化vector,uninitialized_fill_n的实现将在算法的介绍中专门介绍。

1.5.3.         explicit vector(size_type __n)

创建一个大小、容量均为n,allocator为allocate_type()的vector,其内元素被初始化为_Tp()。
它调用算法uninitialized_fill_n初始化vector,uninitialized_fill_n的实现将在算法的介绍中专门介绍。

1.5.4.         vector(const vector<_Tp, _Alloc>& __x)

copy constructor,创建一个大小和容量均为__x.size(),allocator为__x的allocator的vector。
    内存分配完成后再调用算法uninitialized_copy将__x内的所有元素拷贝到新的vector中去。
    注意创建的vector只是大小与__x相等,容量小于或等于__x的容量。

1.5.5.         template <class _InputIterator> vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a = allocator_type())

如果__first和__last为integral,即_Is_integer<_InputIterator>::_Integral为true,那么将传建一个大小为__first,allocator为__a的vector,其内元素都被初始化为__last。
如果__frist和__last不为integral,即它们真的是iterator,那么将创建一个vector,用[__first,__last )区间内的元素去初始化它,在实现方法上,必须分两种情况,如果_InputIterator是一个

1.5.6.         ~vector()

1.5.7.         allocator_type get_allocator() const

取得该vector的allocator。

1.5.8.         iterator begin()

得到指向vector第一个元素的iterator。

1.5.9.         const_iterator begin() const

得到指向vector第一个元素的const iterator。

1.5.10.    iterator end()

得到指向vector最后一个元素的下一个位置的iterator。

1.5.11.    const_iterator end() const

得到指向vector最后一个元素的下一个位置的const iterator。

1.5.12.    reverse_iterator rbegin()

得到一个reverse_iterator,指向vector的最后一个元素。

1.5.13.    const_reverse_iterator rbegin() const

得到一个const reverse_iterator,指向vector的最后一个元素。

1.5.14.    reverse_iterator rend()

得到一个reverse_iterator,指向vector的第一个元素的前一个元素。

1.5.15.    const_reverse_iterator rend() const

得到一个const reverse_iterator,指向vector的第一个元素的前一个元素。

1.5.16.    size_type size() const

返回vector的大小,即目前已经被占用了的位置个数。

1.5.17.    size_type max_size() const

返回vector可以容纳的元素的最大个数。因为vector是可以任意扩充的数组(只有内存没有耗尽),因此max_size的返回值是size_type可以表示的最大值/sizeof( _Tp )。

1.5.18.    size_type capacity() const

返回vector的容量,即目前已经被占用了的位置个数和剩余位置个数之和。

1.5.19.    bool empty() const

判断vector是否为空,即vector的大小是否为0,它比 size() == 0 效率更高。

1.5.20.    reference operator[](size_type __n)

返回编号为n的元素的reference,n从0开始编,即第一个元素的编号为0。

1.5.21.    const_reference operator[](size_type __n) const

返回编号为n的元素的const reference,n从0开始编,即第一个元素的编号为0。

1.5.22.    reference at(size_type __n)  (须定义__STL_THROW_RANGE_ERRORS)

与reference operator[]( size_type __n )功能一样,但它会检查__n是否合法,即是否已经超过了vector的大小,如果非法则抛出range_error异常。

1.5.23.    const_reference at(size_type __n) const  (须定义__STL_THROW_RANGE_ERRORS)

与reference operator[]( size_type __n )功能一样,但它会检查__n是否合法,即是否已经超过了vector的大小,如果非法则抛出range_error异常。

1.5.24.    vector<_Tp, _Alloc>& operator=(const vector<_Tp, _Alloc>& __x)

1.5.25.    void reserve(size_type __n)

1.5.26.    void assign(size_type __n, const _Tp& __val)

1.5.27.    reference front()

1.5.28.    const_reference front() const

1.5.29.    reference back()

1.5.30.    const_reference back() const

1.5.31.    void push_back(const _Tp& __x)

1.5.32.    void push_back()

1.5.33.    void swap(vector<_Tp, _Alloc>& __x)

1.5.34.    iterator insert(iterator __position, const _Tp& __x)

1.5.35.    iterator insert(iterator __position)

1.5.36.    void pop_back()

1.5.37.    iterator erase(iterator __position)

1.5.38.    iterator erase(iterator __first, iterator __last)

1.5.39.    void resize(size_type __new_size, const _Tp& __x)

1.5.40.    void resize(size_type __new_size)

1.5.41.    bool operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)

1.5.42.    bool operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)

1.5.43.    bool operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)

1.5.44.    bool operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)

1.5.45.    bool operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)

1.5.46.    bool operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息