最近在看《STL源码剖析》,读到了Algorithm 中rotate的实现部分,对于random access iterator版本的算法存在疑问,查找了资料进行汇总,整理如下。
- 《STL源码剖析》学习--6章--_rotate算法分析
- STL源码—— rotate算法理解 的图可以看一下,文字表述混乱。
- 串或序列的rotate操作 的“数论”的数学解释。
- STL源码之rotate函数结合图和实例分析 中的图不错,但应该将发生交换的位置与未发生交换的位置的颜色区分开,而不是将区间区分开。
- 数组循环移位算法(左旋字符串)【总结】 总结的较好
本质上是一个数学问题,通过求最大公因子,建立一系列循环链,链上的元素一步到位,直接放在旋转后**应该 **在的位置,使得该算法无需额外的空间复杂度。
为了方便理解,写了段小程序对旋转的过程进行说明和解释,参见STL rotate test 。