【代码片-2】 《STL源码剖析》读书笔记------第3 章 迭代器概念与traits编程技法

浏览: 177 发布日期: 2016-11-27 分类: c++
template<class InputIterator,class Distance>
inline void __advance(InputIterator &i,Distance n, input_iterator_tag)
{
	//单向,逐一前进
	while (n--)	++i ;
}


template<class ForwardIterator,class Distance>
inline void __advance(ForwardIterator &i,Distance n,forward_iterator_tag) 
{
	__advance(i,n,input_iterator_tag()) ; //由于正向迭代器也是输入迭代器
}


template<class BidiectionalIterator,class Distance>
inline void __advance(BidiectionalIterator &i,Distance n,bidirectional_iterator_tag)
{
	//双向,逐一前进	
	if(n >= 0)
	{
		while(n--) ++i ;
	}
	else	
		while(n++) --i ;
}


template<class RandomAccessIterator,class Distance>
inline void __advance(RandomAccessIterator &i , Distance n ,random_access_iterator_tag)
{
	//双向,跳跃前进
	i += n ;	
}
返回顶部