После вызова erase
на итераторе в std::map
он становится недействительным. Это означает, что вы не можете его использовать. Попытка использовать его (например, увеличивая его) недопустима и может привести к чему-либо (включая сбой). Для std::map
вызов erase
в итераторе не делает недействительным любой другой итератор, поэтому (например) после этого вызова (если it
не было T2pS.end()
), он будет действительным:
T2pS.erase( it++ );
Конечно, если вы используете этот подход, вы не захотите безоговорочно увеличивать it
в цикле for.
Для этого примера, однако, зачем стереть в цикле for? Почему бы просто не вызвать T2pS.clear () в конце цикла.
С другой стороны, похоже, что у вас есть необработанный указатель «справа» от карты, но карта, кажется, владеет указанным объектом. В таком случае, почему бы не сделать объект справа от карты неким интеллектуальным указателем, таким как std :: tr1 :: shared_ptr?
[Кстати, я не вижу никаких параметров шаблона для map
. Вы напечатали определенный экземпляр std::map
как map
в локальном пространстве имен?]