iterator validity ,after erase() call in std::set
c++, set, stl
Solution
Since you are just apparently deleting every element of the set, you could just do:
for (SETTYPE::iterator itr2=li.begin();itr2!=li.end();itr2++)
{
classA *lt=(classA*)(*itr2);
delete lt;
}
li.clear(); // clear the elements
Problem
Do erase call in std::set invalidate iterator ? As i have done below 5th from last line..? if yes what is better way to erase all elements from 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 ? } } } ```