C++'s std::rotate

Peter Alexander via Digitalmars-d digitalmars-d at puremagic.com
Mon Aug 18 01:44:58 PDT 2014


On Monday, 11 August 2014 at 03:29:56 UTC, Andrei Alexandrescu 
wrote:
>[...] can be implemented generically for ranges that offer
> front as a reference:
>
> bool sameFront(R1, R2)(R1 r1, R2 r2) {
>   return &r1.front == &r2.front;
> }

This doesn't work for ranges that visit the same element twice, 
e.g.

cycle(arr).take(arr.length + 1)
[0, 0].map!(i => arr[i])

I suspect most ranges will have to implement the sameFront 
primitive manually, usually forwarding to the underlying range.

Related: most mutating algorithms won't work for these kinds of 
ranges, as we usually presume lvalue ranges never visit the same 
lvalue twice. Perhaps this needs to be mentioned on affected 
algorithms?


More information about the Digitalmars-d mailing list