次のコードを検討してください。
Class MyClass自己定義クラスです:
class MyClass
{
public:
MyClass(int v) : Val(v) {}
int Val;
};
次に、次のコードは、Debug Assertion Failedを呼び出した直後にループ内で発生しますit = T.erase(it);。
unordered_set<MyClass*> T;
unordered_set<MyClass*>::iterator it;
for (int i=0; i<10; i++)
T.insert(new MyClass(i));
for (it = T.begin(); it != T.end(); it++)
{
if ( (*it)->Val == 5 )
it = T.erase(it); // After this line executes, in the next loop, the error occurs.
}
それを解決する方法とその理由は? PS: 私の環境:VS2010