迭代器的使用--关于迭代器的失效
来源:互联网 发布:网络龙虎游戏 编辑:程序博客网 时间:2024/06/05 09:12
这是程序员面试宝典上的一个小题。
要点是:使用erase之后迭代器失效。
实际上失效是指原来的迭代器,在删除一个元素之后,自动指向了下一个元素。
测试代码如下,删除容器中的值为6的所有元素。
A 错误的代码为:
#include <iostream>#include <vector>using namespace std;void print(vector<int>);int main(){ vector<int> array; array.push_back(1); array.push_back(6); array.push_back(6); array.push_back(3); vector<int> :: iterator itor; for (itor = array.begin(); itor != array.end(); itor++) { if (6 == *itor) { array.erase(itor); } } cout << "vector size is: " << array.size() << endl; for (itor = array.begin(); itor != array.end(); itor++) { cout << *itor << " " << endl; } return 0;}
输出的结果是:1, 6, 3.第二个6没有删除。
B 修改后的代码如下:
#include <iostream>#include <vector>using namespace std;void print(vector<int>);int main(){ vector<int> array; array.push_back(1); array.push_back(6); array.push_back(6); array.push_back(3); vector<int> :: iterator itor; for (itor = array.begin(); itor != array.end();) { if (6 == *itor) { array.erase(itor); } else itor++; } cout << "vector size is: " << array.size() << endl; for (itor = array.begin(); itor != array.end(); itor++) { cout << *itor << " " << endl; } return 0;}
结果是 1 ,3
可见,使用了erase之后,迭代器自动指向了下一个元素。
- 迭代器的使用--关于迭代器的失效
- 关于迭代器失效的讨论
- 关于迭代器失效的一些认识
- 关于迭代器失效的一些认识
- 关于迭代器失效的一些认识
- 关于STL迭代器失效的思考.
- 关于迭代器失效的一些认识
- C++迭代器失效: 典型的迭代器失效.
- 迭代器失效的问题
- 迭代器的失效
- vector的迭代器失效
- 迭代器失效的例子
- 容器迭代器的失效
- 【C++】迭代器的失效
- 迭代器失效的场景
- 迭代器失效的总结
- 关于vector的erase操作后,迭代器失效问题
- 关于list循环删除元素,迭代器失效的问题
- effective java(序列化)
- [MSDN_vs2008] dynamic_cast Operator
- Linux统计文件行数 wc用用法
- PHP正则表达式:将1234567890转换成1,234,567,890 每3位用逗号隔开的形式
- log4j笔记
- 迭代器的使用--关于迭代器的失效
- 【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
- Qt自绘滚动条
- poj 1321棋盘问题
- mysql中DATETIME、DATE和TIMESTAMP的区别
- PHP正则表达式 /i, /is, /s, /isU等用法
- db2错误信息对对应SQL
- gdbserver远程调试的具体实现(已测试通过)
- C#判断网络地址 Url 是否存在的方法