中擦除()後,迭代器的有效性在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