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;
}

Reply via email to