中擦除()后,迭代器的有效性在std :: set invalidate iterator中擦除调用吗?正如我从最后一行5号以下完成的..? 如果是有什么更好的方式来擦除集的所有元素在std :: set
class classA
{
public:
classA(){};
~classA(){};
};
struct structB
{
};
typedef std::set <classA*, structB> SETTYPE;
typedef std::map <int, SETTYPE>MAPTYPE;
int __cdecl wmain (int argc, wchar_t* pArgs[])
{
MAPTYPE mapObj;
/*
...
.. Some Operation Here
...
*/
for (MAPTYPE::iterator itr1=mapObj.begin(); itr1!=mapObj.end(); itr1++)
{
SETTYPE li=(*itr1).second;
for (SETTYPE::iterator itr2=li.begin();itr2!=li.end();itr2++)
{
classA *lt=(classA*)(*itr2);
li.erase(itr2);
delete lt; // Does it invalidate Iterator ?
}
}
}
typedef std :: set SETTYPE; 我不知道你为什么要给StructB作为std :: set的第二个模板参数。 std :: set只保存一个值(没有与map一起使用的键),第二个模板参数用于为集合提供比较函数(默认为std :: less) –
2009-10-28 11:12:43