Thực hiện cuộc gọi xóa trong std :: đặt trình vòng lặp không hợp lệ? Như tôi đã làm dưới 5 từ dòng cuối cùng ..? nếu có cách nào tốt hơn để xóa tất cả các yếu tố từ bộ là những gìhiệu lực của trình lặp, sau khi xóa() gọi trong 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; Tôi không chắc chắn lý do tại sao bạn cho StructB làm đối số mẫu thứ hai cho std :: set. std :: set chỉ giữ một giá trị (không có khóa nào được đặt là có bản đồ), đối số mẫu thứ hai được sử dụng để cung cấp hàm functor so sánh cho tập hợp (std :: less by default) –