General Purpose library for Freestanding C++ and POSIX systems
Nie możesz wybrać więcej, niż 25 tematów
Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
|
#pragma once
|
|
|
|
#include "gp/algorithms/move.hpp"
|
|
|
|
namespace gp {
|
|
template<typename iterator>
|
|
iterator rotate(iterator first, iterator new_first, iterator last)
|
|
{
|
|
|
|
if(first == new_first) return last;
|
|
if(new_first == last) return first;
|
|
|
|
iterator in = new_first;
|
|
iterator out = first;
|
|
iterator mv = first;
|
|
|
|
while(in != last) {
|
|
if(out == mv) mv = in;
|
|
gp::swap((*out++), (*in++));
|
|
}
|
|
|
|
// rotate the remaining sequence into place
|
|
(rotate)(out, mv, last);
|
|
return out;
|
|
}
|
|
|
|
}
|