joz*_*yqk 13 arrays algorithm list circular-buffer
我正在使用循环缓冲区将数据推送到列表的任何一端.在我完成之后,我想对齐缓冲区,使列表中的第一个元素位于零位置,并且可以像常规数组一样使用,而不需要任何花哨的索引开销.
所以我有我的循环list容量N,它有n从任意索引开始的元素f.

移动/旋转所有元素的最快方法是f = 0什么?
问题是我想要就地做到这一点(当然,当然需要一些寄存器/临时工).缓冲区可能是full(n = N),[ EDIT ],但我也有兴趣有效地处理它几乎为空的情况.
从std::rotatecplusplus.com上的实现中获取的算法非常好:
template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle,
ForwardIterator last)
{
ForwardIterator next = middle;
while (first!=next)
{
swap (*first++,*next++);
if (next==last) next=middle;
else if (first==middle) middle=next;
}
}
Run Code Online (Sandbox Code Playgroud)
http://www.cplusplus.com/reference/algorithm/rotate/