You can easily create the every_n predicate and use it to filter as desired for copy_if, etc. This is as general as you can get.
An approximate (note: untested so far) example of the predicate "every n elements":
template <typename Integer> struct every_n { static_assert (std::numeric_limits<Integer>::is_integer, "Must behave like an integer"); public: explicit every_n (Integer const& e) : n(e), x(1) {} every_n (every_n const& E) : n(En), x(Ex) {} bool operator () (...) { if (x<n) { ++x; return false; } else { x=Integer(1); return true; } } private: Integer x; const Integer n; };
All code requires that every() called with a type that behaves like an integer.
(The code uses static_assert, begin (), end (), and copy_if (), which are C ++ 11 but also function well in C ++ 03 if you back up the corresponding functions, just like me)
source share