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++);
}
posted @ 2024-02-11 01:39  cxy8  阅读(16)  评论(0编辑  收藏  举报