Перейти к следующему итератору в цикле 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);
}