Счас приспособил этот hasPrevious()/previous(). А проход iterator-ом от end() к begin() вообще корректен? Нафик тогда в stl были введены эти reverse_iterator? Для красоты, что-ли?
Если не делать специальных телодвижений, то такой цикл приведёт к обращению к несуществующему элементу *list.end() и не будет обращения к существующему *list.begin(). Тогда уж так:
> Нафик тогда в stl были введены эти reverse_iterator?
Так можно писать универсальные алгоритмы, в которых обращение к переданному итератору идёт через операцию ++. Передавая в них обычный итератор получаем обход в прямом направлении, reverse_iterator --- в обратном. Увы, лямбда-функций в нативном C++ нет и STL проектировался без их возможностей :(