Question: Is there any standard implementation (meaning stdlib or boost) of an iterator that wraps another iterator and gives only each nth element of it?

I first thought this would be possible with a fitting predicate and boost::filter\_iterator, but the predicate gets only the value and not the base iterator, so it cannot tell the distance to the start.

**Edit**   

To give some more information:
The iterator should be compatible with functions like `std::transform` or `std::copy`.
So it should be used like stdlib iterators.

Similar questions:  

[C++/STL: std::transform with given stride?](https://stackoverflow.com/questions/2476425/c-stl-stdtransform-with-given-stride)   

[Non-unit iterator stride with non-random access iterators](https://stackoverflow.com/questions/9387569/non-unit-iterator-stride-with-non-random-access-iterators)

Answer: 
Boost.Range provides [a stride adaptor](http://www.boost.org/doc/libs/1_51_0/libs/range/doc/html/range/reference/adaptors/reference/strided.html). Using `boost::begin`/`boost::end` would net you the associated iterators.
You can use `boost::filter_iterator` with predicate like:

```
 template< typename T, int N >
 struct EveryNth {
    bool operator()(const T&) { return m_count++ % N == 0; }
    EveryNth() : m_count(0) {}
    private:
      int m_count;
 };

```