D's rotateTail [was: C++'s std::rotate]
Fool via Digitalmars-d
digitalmars-d at puremagic.com
Sun Aug 24 03:05:39 PDT 2014
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;
> }
More information about the Digitalmars-d
mailing list