template<class InputIterator, class Distance> void advance(InputIterator& i, Distance n, input_iterator_tag) { for(; n>0; --n,++i){} // InputIterator具有++性 } 2、ForwardIterator
template<class ForwardIterator, class Distance> void advance(ForwardIterator& i, Distance n,forward_iterator_tag) { advance(i, n, input_iterator_tag()); } 3、BidirectionalIterator
template<class BidirectionalIterator, class Distance> void advance(BidirectionalIterator& i, Distance n, bidirectional_iterator_tag) { if(n>=0) // 具有++、--性 for(; n>0; --n,++i){} else for(; n>0; ++n,--i){} } 4、RandomAccessIterator
template<class RandomAccessIterator, class Distance> void advance(RandomAccessIterator& i, Distance n, random_access_iterator_tag) { i += n; // 具有++、--、+=等性 } 函数对象(Function object)也称仿函数(Functor),是一种能以一般函数调用语法来调用的对象,函数指针(Function pointer)是一种函数对象,所有具有Operator()操作符重载的成员函数也是函数对象。函数对象一般分为无参函数(Generator),单参函数(Unary Function)和双参函数(Binary Function)三种形式,它们分别能以f()、f(x)和f(x,y)的形式被调用,STL定义的其他所有函数对象都是这三种概念的强化。如下简单示例展示几种形式的实现: