迭代器操作特别需要注意(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()了。。。。
明显是因为迭代器到结尾了却还在++,
错误代码:
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()了。。。。
相关文章推荐
- SharepPoint使用数据视图操作用户类型栏位需要特别注意的地方
- PHP开发discuz论坛操作需要注意的问题详解
- Vue.js特别需要注意的细节(仅对自己参考)
- Mac笔记本操作需要注意的地方
- mtk中操作读写nvram需要注意的问题!
- 支付宝接口需要特别注意的几点问题
- 转 在TreeView中操作节点CheckBox需要注意的
- block(5) - block需要特别注意的地方
- 字符串相关操作————字符串操作需要注意的一些东西
- Linux系统线上操作替换文件需要注意哪些
- Android集成微信支付主要步骤和特别需要注意的问题
- mysql数据库你需要特别注意的23个事项
- JPA性能调优会需要特别注意的2点
- 生活中特别需要注意的一些小案例
- 自己总结的一些数据库操作需要注意的东西
- Fragment 出栈的方法popBackStack需要特别注意的一点
- 在线程池(ExecutorService)中使用Threadlocal时,需要注意他的复位操作
- PHP discuz论坛操作需要注意的问题汇总
- char和short 给int赋值或与int比较时 需要特别注意
- 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题