SGI STL Vector代码剖析(三)

我们接着Vector(二)来继续解析代码。

public:
	iterator begin() { return _M_start; }//这里的iterator这是一个类型指针,这里的意思是返回一个类型指针。
	const_iterator begin() const { return _M_start; }
	iterator end() { return _M_finish; }
	const_iterator end() const { return _M_finish; }

	reverse_iterator rbegin()//reverse_iterator反向指针
	{
		return reverse_iterator(end());//实现一个反向指针了,就是在开始的位置返回结尾的位置。
	}
	const_reverse_iterator rbegin() const
	{
		return const_reverse_iterator(end());
	}
	reverse_iterator rend()
	{
		return reverse_iterator(begin());
	}
	const_reverse_iterator rend() const
	{
		return const_reverse_iterator(begin());
	}

	size_type size() const//空间的长度
	{
		return size_type(end() - begin());//总空间-开始位置=空间的长度
	} 
	size_type max_size() const
	{
		return size_type(-1) / sizeof(_Tp);/*最大空间,size_type是UINT类型的,UINT类型-1就是最大值,
											#define UINT_MAX      0xffffffff    maximum unsigned int value。
											size_type(-1) 就是Windows.h里面的一个UINT_MAX的宏。
											最大长度/类型大小=最大空间长度。
										   */
	}
	size_type capacity() const
	{
		return size_type(_M_end_of_storage - begin());//总空间-开始位置=容积
	}
	bool empty() const
	{
		return begin() == end();//这样写很节约资源。效率很高
	}

	reference operator[](size_type __n) { return *(begin() + __n); }//重载[]。
	const_reference operator[](size_type __n) const { return *(begin() + __n); }
这一段算法没什么好说的,很简单,大家自己看看得了。接下来我们分析下#ifdef __STL_THROW_RANGE_ERRORS 范围异常里面的代码做详解。

#define __STL_THROW_RANGE_ERRORS
#ifdef __STL_THROW_RANGE_ERRORS//确定是否抛出范围异常的宏,有时候超出了范围但是不希望抛出范围异常。
	void _M_range_check(size_type __n) const //范围检查
	{
		if (__n >= this->size())  //检查空间长度是否超出了空间的大小。
			__stl_throw_range_error("vector");
	}

	reference at(size_type __n)//at是会进行范围检测的,如果超出了范围就会抛出异常。
	{
		_M_range_check(__n);
		return (*this)[__n];//返回一个指定位置的值,这里的[]就是上面重载了的[]。
	}
	const_reference at(size_type __n) const //Const版本的at。
	{
		_M_range_check(__n); 
		return (*this)[__n];
	}
#endif /* __STL_THROW_RANGE_ERRORS */



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值