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?
Non-unit iterator stride with non-random access iterators
Boost.Range provides a stride adaptor. 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;
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With