Перейти к следующему итератору в цикле for на основе диапазона

Для моего проекта мне нужно заставить итераторы из цикла перейти к следующему элементу в контейнере, выполнить некоторые операции и снова вернуться к тому же итератору и просто продолжить, однако по какой-то причине ни advance ни next а затем используя prevпохоже работает. Итак, как мне получить следующий итератор и просто вернуться к предыдущему?

Я получаю следующее сообщение об ошибке:

no matching function for call to 'next(int&)'
no type named 'difference_type' in 'struct std::iterator_traits<int>'

Спасибо!

template<class T>
void insert_differences(T& container)
{

    for(auto it : container){
        // do some operations here
        //advance(it,1);
        it = next(it); 
        // do some operations here 
        //advance(it, -1);
        it = prev(it);
        }

}

1 ответ

Решение

Цикл for на основе диапазона выполняет итерацию по элементам. Названиеitсбивает с толку; это не итератор, а элемент, поэтомуstd::next а также std::prev не работай с этим.

Выполняет цикл for по диапазону.

Используется как более читаемый эквивалент традиционного цикла for, работающего с диапазоном значений, например со всеми элементами в контейнере.

Вы должны сами написать цикл, используя итераторы, например

for(auto it = std::begin(container); it != std::end(container); it++){
    // do some operations here
    //advance(it,1);
    it = next(it); 
    // do some operations here 
    //advance(it, -1);
    it = prev(it);
}
Другие вопросы по тегам