Здравствуйте DarkGray, Вы писали:
std::list <int> List;
...
list <int>::iterator Iter = List.begin ();
while ( Iter != List.end () )
List.erase ( Iter++ );
Для for'a можно немного переделать.
Весь фокус в том, что постинкрементный operator++ ДЕЛАЕТ КОПИЮ текущего итератора, увеличивает текущий итератор и возвращает сохраненную копию. Таким образом, текущий итератор остается валидным :-).
Good luck