There was a bug in my C++ translation of rotateTail. The only
significant change in execution time is marked below:
On Sunday, 24 August 2014 at 09:20:59 UTC, Fool wrote:
compiler | algorithm | execution time
----------+--------------------------+----------------
clang++ | std::rotate | 1.62s
clang++ | my_rotate / std::reverse | 1.44s
clang++ | my_rotate / my_reverse | 0.38s <-
ldc2 | rotateTail | 1.64s
g++ | std::rotate | 0.57s
g++ | my_rotate / std::reverse | 1.43s
g++ | my_rotate / my_reverse | 0.37s
gdc | rotateTail | 0.38s
The fixed implementation of my_rotate:
template <typename TIterator>
TIterator my_rotate
(
TIterator b,
TIterator m,
TIterator e
)
{
if (m == e) return b;
if (b == m) return e;
// my_reverse(m, e); // <-
std::reverse(m, e); // <-
auto s = std::next(b, std::distance(m, e));
// my_reverse(b, e);
std::reverse(b, e);
// my_reverse(s, e);
std::reverse(s, e);
return s;
}