std::list
допускает только двунаправленную итерацию, поэтому вы можете перемещать итератор только на одну позицию за раз. Таким образом, вам нужно создать новый итератор:
iter_copy = iter;
--iter;
Очевидно, вы несете ответственность за обеспечение того, что предыдущий элемент действительно существует, прежде чем вы уменьшите итератор.
В C ++ 0x эта функциональность аккуратно обернута в функцию std::prev
, которую может поддерживать ваша реализация Стандартной библиотеки C ++. Если нет, то это выглядит примерно так:
template <typename BidiIt>
BidiIt prev(BidiIt x, typename std::iterator_traits<BidiIt>::difference_type n=1)
{
std::advance(x, -n);
return x;
}