【发布时间】:2014-04-23 18:26:44
【问题描述】:
请考虑以下代码:
Class MyClass是自定义类:
class MyClass
{
public:
MyClass(int v) : Val(v) {}
int Val;
};
那么下面的代码会在刚刚调用it = T.erase(it);之后导致Debug Assertion Failed进入循环:
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
【问题讨论】:
-
如果擦除最后一个元素,则设置
it = T.end();,然后执行it++,这是未定义的。
标签: c++ unordered-set