就拿leetcode第706题来说,先上错误代码:
void remove(int key) {
int h=hash(key);
for(auto it = data[h].begin(); it != data[h].end(); it++)
{
if((*it).first == key)
{
data[h].erase(it);
}
}
}
直接报错,大家再看一下正确的代码
void remove(int key) {
int h=hash(key);
for(auto it = data[h].begin(); it != data[h].end(); it++)
{
if((*it).first == key)
{
data[h].erase(it);
return;
}
}
}
这时你就明白了,少个了return,咱们解释一下,如果没有return在删除键值对之后it指向的地址为空成为了野指针在对it++,电脑就不明白下一个指针该指向哪里。所以删除之后这个函数就完成了它本身的任务,直接return让系统销毁这个函数即可。