Вы должны иметь возможность уменьшить итератор списка; не видя ваш код и ошибку, которую он выдает, я не могу догадаться, что там происходит не так.
Однако было бы удобнее представить анимацию в виде общего диапазона итератора:
template <typename ForwardIterator>
void animate(ForwardIterator start, ForwardIterator end)
{
for (; start != end; ++start) {
start->display();
}
}
std::vector<frame> animation = ...;
animate(animation.begin(), animation.end()); // play forwards
animate(animation.rbegin(), animation.rend()); // play backwards