Actually my implementation is rather silly now that I've looked at it again. :)
I should have taken advantage of ranges. E.g. I could use stride() to skip every Nth element and I could use cycle() to create a circular buffer. I'll give this a shot soon.