最近在看侯捷的《STL源码剖析》,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下。
《STL源码剖析》学习--6章--random access iterator _rotate算法分析
针对forward iterator 和 bidirectional iterator的_rotate 比较好理解,但是对random access iterator _rotate却难以理解,作者也没有过多的文字讲解。
参考http://www.cnblogs.com/atyuwen/archive/2009/11/08/rotate.html,这个作者有好些地方没讲清楚,再做一下细致的记录。
先列出源码如下:
template<class RandomAccessIterator, class Distance>
void __rotate(RandomAccessIterator first,
RandomAccessIterator middle,
RandomAccessIterator last, Distance*,
random_access_iterator_tag)
{
Distance n = __gcd(last - first, middle - first);
while (n--)
__rotate_cycle(first, l