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_type1.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
_Tp1.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_t1.4.7. defference_type
ptrdiff_t1.4.8. allocator_type
_Base::allocator_type1.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)
相关文章推荐
- SGI STL V3.2 源码剖析笔记-3. vector(未完待续)
- SGI STL V3.2 源码剖析笔记-2. 迭代器(未完待续)
- SGI STL V3.2 源码剖析笔记-0. 说明和准备资料
- C++ Standard Stl -- SGI STL源码学习笔记(06) stl_vector 与 一些问题的细化 2 push_back函数剖析
- SGI STL V3.2 源码剖析笔记-1. 空间配置器
- C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析
- SGI STL V3.2 源码剖析 - 空间配置器
- C++ Standard Stl -- SGI STL源码学习笔记(05) stl_vector 与 一些问题的细化 1
- STL源码剖析学习笔记之具备次配置力(sub-allocation)的SGI空间配置器
- STL学习笔记之容器--vector(二)源码剖析
- Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme
- STL 源码剖析笔记之仿函数
- STL 之 vector 源码剖析
- SGI_STL slist 源码阅读笔记
- jquery源码学习笔记三:jQuery工厂剖析
- STL 源码剖析读书笔记三:序列式容器之 vector、list
- SGI STL源码之vector
- 【Java集合源码剖析】Vector源码剖析
- STL学习笔记之容器--list(二)源码剖析
- 【转】ASP.NET MVC学习笔记-MVC运行机制之源码剖析