Re: Выход итератора за пределы vector::end()
От: IROV..  
Дата: 30.11.09 21:21
Оценка:
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() );
}
я не волшебник, я только учусь!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.