这可能是我写的最短的博客……
出现这个问题一般有两种情况,第一种是访问到了list.end()节点,检查这种情况的方式是在循环的开头处写一个判断,
if(list.end() == something)return;
第二种比较特殊,即访问到了list.begin()前面的节点。如果是倒序遍历,可以采用与上一行相同的方式进行判断,
if(list.rend() == something)return;
但是如果为因为使用--list.erase(something)时恰巧删除了list.begin(),我的建议是将循环改为下面的结构:
for(auto p = mlist.begin(); p != mlist.end(); )
{
...
if(...)
{
p = mlist.erase(p);
continue;
}
++p;
}