template<class Iterator, class Pred>
void for_each_step( Iterator it, Iterator it_end, typename Iterator::difference_type n, Pred pred )
{
typename Iterator::difference_type diff = std::distance( it, it_end );
typename Iterator::difference_type fixed_diff = diff - diff % n;
Iterator it_fixed = it;
std::advance( it_fixed, fixed_diff );
for( ; it != it_fixed; std::advance( it, n ) )
{
pred( *it );
}
}
void main()
{
std::vector<int> vec;
vec.push_back(10); // вектор из 1 элемента
vec.push_back(11); // вектор из 1 элемента
vec.push_back(12); // вектор из 1 элемента
struct MyPred
{
void operator()( int &i )
{
i+=1;
}
};
for_each_step( vec.begin(), vec.end(), 2, MyPred() );
}