set中的erase使用的一个错误
如果在遍历set的时候去erase很容易出事
事故代码:
multiset<int>a;
for(auto it=a.begin();it!=a.end();it++){
a.erase(it);
}
原因:我们删除了it之后指针不知道下一个位置应该去哪了,就寄。
两种比较正确的写法是
multiset<int>a;
for(auto p=a.begin();p!=a.end();p++){
p=a.erase(p);
}
multiset<int>a;
for(auto p=a.begin();p!=a.end();p++){
p=a.erase(p++);
}