STL(版本介绍)_vecor_源码解析_vs2013(粗略) ----- po学校

STL 版本   

vs STL        windows平台 vs编译器实现的版本 

SGI STL   是gcc默认版本最有 权威的

STL port 效率最高的


源码的命名方式

_MyBase() 非标准接口     只在内部使用    

vecor()非_的名称  标准接口  暴露出去   STL 的标准

知识点

typedef typename _Alty<_Ty>  _Alty1; //typename  必须要加 加了之后 是_Ty模板

typedef _Alty<_Ty>  _Alty1; // 是一个静态的 认为类型就是  _Ty 不会替换


template<typeanme ... _Other2>   //...表示多个



vs2013下  

#include <vector>

int main()
{
	std::vector<int> nVec;
	return 0;
}

断点调试  F11  皮皮虾我们走!

进入到 vector默认构造函数 

	vector()
		: _Mybase()
		{	// construct empty vector
		}

天啊撸  什么都没做   继承了类   Mybase继承      F12看一下 MyBase 

typedef _Vector_alloc<!is_empty<_Alloc>::value,
		_Vec_base_types<_Ty, _Alloc> > _Mybase;
是一个 模板类 _Vector_alloc 的别名          看全面一点

template<class _Ty,
	class _Alloc = allocator<_Ty> >
	class vector
		: public _Vector_alloc<!is_empty<_Alloc>::value,
			_Vec_base_types<_Ty, _Alloc> >
看到了  vecor 类模板全套   卧槽命名有点小恶心。   修改一下

template<typename  _Ty,	typename _Alloc = allocator<_Ty> >
class vector: public _Vector_alloc<!is_empty<_Alloc>::value,
	_Vec_base_types<_Ty, _Alloc> >

还是看不懂  一点点的     分析        vecor<int>         做一个替换  

template<typename  int, typename _Alloc = allocator<int> >
class vector: public _Vector_alloc<!is_empty<_Alloc>::value,
	_Vec_base_types<int, _Alloc> >

allocator<int> 是一个分配器        主要操作就是 分配内存指针

!is_empty<_Alloc>::value   顾名思义 是否为空
_Vec_base_types<int, _Alloc>     这个鬼全是 一些 别名。。。。。神经病啊!


继续解析  _Vector_alloc

template<class _Alloc_types>
	class _Vector_alloc<false, _Alloc_types>
		: public _Vector_val<typename _Alloc_types::_Val_types>
有继承了一个   _Vector_val 的类     

点进去  看到  

	class _Vector_val
		: public _Container_base
又是一个继承  我只能说 贵圈真乱、、、   

_Container_base  是一个容器的结构体   

核心的一个类 

_Vector_val

template<class _Val_types>
	class _Vector_val
		: public _Container_base
	{	// base class for vector to hold data
public:
	typedef _Vector_val<_Val_types> _Myt;
	//下面的这几个是 STL标准接口 必须实现     
	typedef typename _Val_types::value_type value_type;
	typedef typename _Val_types::size_type size_type;
	typedef typename _Val_types::difference_type difference_type;
	typedef typename _Val_types::pointer pointer;
	typedef typename _Val_types::const_pointer const_pointer;
	typedef typename _Val_types::reference reference;
	typedef typename _Val_types::const_reference const_reference;

	typedef _Vector_iterator<_Myt> iterator;
	typedef _Vector_const_iterator<_Myt> const_iterator;

	_Vector_val()
		{	// initialize values
		_Myfirst = pointer();
		_Mylast = pointer();
		_Myend = pointer();
		}

	pointer _Myfirst;	// 指针数组的开始
	pointer _Mylast;	// 指针数组用了多少
	pointer _Myend;	//  指针数组最大值
	};




总结一下思路            调用  vector     然后 会调用父类 _Vector_alloc  分配器  分配  分配器会有使用  _Vector_val    构造 _Myfirst   _Mylast  _Myend   然后构造完成一个空的 vector     ---看vs 的源码感觉自己已经疯了。。。 = =  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值