最近在看侯捷的《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, last, frist + n, middle - first, value_type(first));
}
template<class E

本文详细分析了STL中用于random access iterator的_rotate算法,通过源码解析和数学定理结合,解释了算法如何实现元素的旋转。文章指出,算法的关键在于求最大公约数并进行循环移位,对于互质的情况,效率尤为高效。
最低0.47元/天 解锁文章
1123

被折叠的 条评论
为什么被折叠?



