STL迭代器遍历中删除元素问题
来源:互联网 发布:edius for mac 编辑:程序博客网 时间:2024/05/16 19:35
STL的管理对象的管理器一般会给上层提供回调函数形如:templete<typename Entry>struct CallBack{ bool exec(Entry* entry)=0;}templete<typename Entry>struct Manager{ bool add_entry() { } void remove_entry() { <span style="color:#FFFFFF;"> <span style="background-color: rgb(153, 255, 153);"> assert(!is_traverse)</span></span> } void foreach(CallBack<Entry>* callback) {<span style="background-color: rgb(153, 255, 153);">is_traverse = true;</span> for(it=_map.begin();it!=_map.end();++it) { if(!callback(entry)) break; } <span style="background-color: rgb(153, 255, 153);"> is_traverse = false;</span> }std::map<int,Entry*> _map;bool is_traverse = false; }如果在上层给的回调函数中有删除的操作,调用了管理器的remove_entry方法,会引起遍历迭代器的紊乱,导致宕机。有以下几种解决办法:1、对写上层回调强制规定不能删除。2、改写在遍历时设置一个内部标记,调用remove_entry时,检查有无标记,如果有,则报警。如上面的绿色代码。3、遍历时,先将内容放入临时容器内,再进行遍历。
0 0
- STL迭代器遍历中删除元素问题
- stl在遍历过程中删除元素
- STL中list,遍历删除元素注意事项
- STL遍历删除元素总结
- stl容器遍历删除元素
- 正向遍历删除元素STL
- STL中用erase()方法遍历删除元素注意的问题
- stl容器在循环遍历中删除元素的方式
- STL容器:在遍历的过程中删除元素
- STL中正确使用ERASE()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- 使用spring @Scheduled注解执行定时任务、
- Java内存分配
- UVA 10300-Ecological Premium
- 修改C中const修饰的变量
- JS 动态获取时间
- STL迭代器遍历中删除元素问题
- ZOJ 3704 I am Nexus Master!
- 动态规划之数字三角形
- 透明度半分比对十六进制
- iOS打包静态库
- HDU 5396 Expression( 组合+dp ??)
- js生成二维码
- UVA 458-The Decoder
- 19 个 Android 开发工具