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定義的其他所有函數對象都是這三種概念的強化。如下簡單示例展示幾種形式的實現: