《我的第一本c++书》学习笔记:STL之迭代器指针的使用注意事项
2013-08-01 19:43
429 查看
如下情况:
循环遍历删除容器中的元素
看似正确,但仔细分析下,
在删除某个元素时,该元素的后一位会自动向前移动一位,以保持vector的连续性,这时迭代器指向的是被删除元素的后一位元素,但此时,由于++it,迭代器又向后移动了一位,
相比没删除元素之前,迭代器向后移动了2位,这样可能造成有些元素没有检查而没被删除。
正确的写法是:
循环遍历删除容器中的元素
for (auto it=vecSalary.begin(); it != vecSalary.end(); ++it) { if(*it < 2) { vecSalary.erase(it); } }
看似正确,但仔细分析下,
在删除某个元素时,该元素的后一位会自动向前移动一位,以保持vector的连续性,这时迭代器指向的是被删除元素的后一位元素,但此时,由于++it,迭代器又向后移动了一位,
相比没删除元素之前,迭代器向后移动了2位,这样可能造成有些元素没有检查而没被删除。
正确的写法是:
for (auto it=vecSalary.begin(); it != vecSalary.end(); ) { if(*it < 2) { it = vecSalary.erase(it); } else { ++it; } }
相关文章推荐
- 关于stl标准容器中的迭代器的使用注意事项
- STL之迭代器的使用注意事项
- 数组与指针--多维数组与多重指针使用注意事项
- 有关STL中map的key是指针的情况分析和其他map使用注意点
- 关于C中指针使用的注意事项
- C++指针与引用(三):引用使用注意事项
- STL中priority_queue的使用注意事项
- COM接口指针使用的注意事项
- c++ shared_ptr智能指针使用注意事项
- C开发注意事项_字符串及指针使用
- TODO:Golang指针使用注意事项
- Python3关与迭代器next()使用为__next__()的一点注意事项
- stl std::map容器排序及使用注意事项
- c++类的STL使用注意事项
- TODO:Golang指针使用注意事项
- STL的使用与注意事项
- 指针的使用注意事项(个人体…
- c语言函数指针使用注意事项
- 【转】二叉树的实现及操作以及指针使用和删除注意事项
- 关于ButterKnife 8.4.0以后版本报空指针的使用注意事项: