是否在std::set无效迭代器中擦除调用?因为我已经从最后一行开始低于第5条了..?
如果是的话,从集合中删除所有元素的更好方法是什么

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 ?
        }
    }
}

最佳答案

由于您显然只是删除集合中的每个元素,因此可以执行以下操作:

    for (SETTYPE::iterator itr2=li.begin();itr2!=li.end();itr2++)
    {
            classA *lt=(classA*)(*itr2);
            delete lt;
    }
    li.clear(); // clear the elements

09-25 22:04