您的位置:首页 > 其它

迭代器操作特别需要注意(list iterator not incrementable)

2014-01-12 00:34 344 查看
今天用到了stl中的list,然后迭代器的使用特别需要注意,程序中突然报出了这个错误:list iterator not incrementable

明显是因为迭代器到结尾了却还在++,

错误代码:

void sortDiffs()
{
list<Diff*>::iterator it;
list<Diff*>::iterator it2;//+
list<Diff*>::iterator it3;//-
for(it = diffs.begin();it != diffs.end(); it++)
{
if((*it)->operation == INSERT)
{
it2 = it++;
for(;it!=diffs.end();it++)
{
if((*it)->operation == EQUAL)
{
break;
}
else if((*it)->operation == INSERT)
{
continue;
}
else
{
it3 = it;
diffs.splice(it2,diffs,it3);
}
}
}
}

}正确代码:
void sortDiffs()
{
list<Diff*>::iterator it;
list<Diff*>::iterator it2;//+
list<Diff*>::iterator it3;//-
for(it = diffs.begin();it != diffs.end(); it++)
{
if((*it)->operation == INSERT)
{
it2 = it++;
for(;it!=diffs.end();)
{
if((*it)->operation == EQUAL)
{
break;
}
else if((*it)->operation == INSERT)
{
it++;
continue;
}
else
{
it3 = it;
it++;
diffs.splice(it2,diffs,it3);
}
}
}
if(it==diffs.end())
break;
}

}

这里需要注意,break之后,for循环后面的++之类的是不会执行的,,所以,如上,当里面循环 it到达end()之后,在到外循环还要++,就超出end()了。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: