关于stl标准容器中的迭代器的使用注意事项
来源:互联网 发布:中山大学网络不好 编辑:程序博客网 时间:2024/05/22 14:28
很多时候会这么写
std::map<int, T*> mMapItem;for( auto it = mMapItem.begin(); it != mMapItem.end(); ++it){//do something}一般情况下不会出错
但是如果在循环里面对mMapItem做一些操作,比如删除的时候,++it的计算结果就会出错
因此如果在循环中有可能会做删除操作的时候这样写会比较好
for( auto it = mMapItem.begin(); it != mMapItem.end(); ){T* e = it->second;++it;//do something}
如果循环中会插入数据的也有可能会出问题,map不是vector,插入的数据很有可能在当前it之前,这个时候新加入的元素不会被遍历。
如果在it之后则会被遍历,因此结果是不确定的。因此这样的操作需要根据不同的容器做特殊处理。
总之就是对于容器的迭代器不能那么随意的使用,很有可能出现一些很难查明的bug
更正一下:
实际上stl容器提供的erase方法一般会返回一个iterator指向下一个节点,在删除的是后直接修正迭代器即可
0 0
- 关于stl标准容器中的迭代器的使用注意事项
- STL 标准容器的选择
- STL 标准模板库 中栈stack 容器的使用
- 标准C++中的STL容器类简介
- 标准C++中的STL容器类简介
- 标准C++中的STL容器类简介
- C++标准库(STL)中的容器
- c++ STL标准容器之Iterator使用
- STL容器的使用
- 使用stl标准容器,遍历容器时出现 iterators incompatible 错误的其中两种原因
- 又一道关于STL中的vector容器的面试题
- c++ STL标准容器的共性(权哥)
- STL标准库的关联容器
- STL之迭代器的使用注意事项
- STL 顺序容器注意事项
- python关于BIF、标准库方法使用的注意事项总结
- 关于STL常用容器的erase使用陷阱
- STL 标准容器比较
- 局部变量声明
- 如何设置 linux vi vim 显示行号
- Mysql常用技巧总结
- python3下几个淘宝、天猫、京东爬虫实例。(价格、销量、评论等)
- orcad中注意的事情
- 关于stl标准容器中的迭代器的使用注意事项
- RESTful API 设计最佳实践
- C# FolderBrowserDialog 的用法
- Lombok 安装、入门 - 消除冗长的 java 代码
- android自动化测试之版本引起的问题
- 给java项目配置jdk
- springMVC自定义属性编辑器
- 过滤器与拦截器的区别及AOP简介
- 富豪与土豪的差别