Go до следующего итератора в цикле for на основе диапазона - PullRequest
3 голосов
/ 16 июня 2020

для моего проекта мне нужно сделать итераторы от l oop до go до следующего элемента в контейнере, выполнить некоторые операции и снова вернуться к тому же итератору и просто продолжить, однако для некоторых причина, по-видимому, ни 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 Ответ

6 голосов
/ 16 июня 2020

На основе диапазона для l oop перебирает элементы. Имя it сбивает с толку; это не итератор, а элемент, поэтому std::next и std::prev с ним не работают.

Выполняет a для l oop в диапазоне.

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

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

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);
}
...