《程序员面试宝典》错题之——STL模板与容器
2020-02-18 08:25
183 查看
程序员面试宝典上有这样一道题:以下代码有什么错,如何修改?(中国某软件公司2005年面试题)
#include <iostream> #include <vector> using namespace std; void PrintVec(vector<int> V) { vector<int>::iterator iter; cout<<V.size()<<endl; for (iter=V.begin();iter!=V.end();iter++) { cout<<*iter<<" "; } cout<<endl; } int main() { vector<int> Vec; Vec.push_back(1); Vec.push_back(2); Vec.push_back(4); Vec.push_back(8); Vec.push_back(8); Vec.push_back(16); vector<int>::iterator iter1; vector<int>::iterator iter2; for (iter1=Vec.begin();iter1!=Vec.end();) { if (8==*iter1) { iter2=iter1; Vec.erase(iter2); } iter1++; } PrintVec(Vec); system("pause"); return 0; }
问题的关键就是在删除“8”之后,指针还是会停留在“8”的位置,而这时候“8”已经从Vec中移除,所以,再往后移是错误的。因此,需要在移除“8”之前把iter1移到4的位置。这也就需要iter--。书上给出了这样的答案:
View Code#include <iostream> #include <vector> using namespace std; void PrintVec(vector<int> V) { vector<int>::iterator iter; cout<<V.size()<<endl; for (iter=V.begin();iter!=V.end();iter++) { cout<<*iter<<" "; } cout<<endl; } int main() { vector<int> Vec; Vec.push_back(1); Vec.push_back(2); Vec.push_back(4); Vec.push_back(8); Vec.push_back(8); Vec.push_back(16); vector<int>::iterator iter1; vector<int>::iterator iter2; for (iter1=Vec.begin();iter1!=Vec.end();iter1++;) { if (8==*iter1) { iter2=iter1; Vec.erase(iter2); iter1--; } } PrintVec(Vec); system("pause"); return 0; }
但是,在vs中测试会发现,其实,这段代码是错误的,原因就在于:移除“8”之后,这个指针已经被删除,而这时候iter1和iter2都已经不属于Vec了,因此,必须要在指针被删除之前就讲iter1的位置往前移:
View Code#include <iostream> #include <vector> using namespace std; void PrintVec(vector<int> V) { vector<int>::iterator iter; cout<<V.size()<<endl; for (iter=V.begin();iter!=V.end();iter++) { cout<<*iter<<" "; } cout<<endl; } int main() { vector<int> Vec; Vec.push_back(1); Vec.push_back(2); Vec.push_back(4); Vec.push_back(8); Vec.push_back(8); Vec.push_back(16); vector<int>::iterator iter1; vector<int>::iterator iter2; for (iter1=Vec.begin();iter1!=Vec.end();iter1++) { if (8==*iter1) { iter2=iter1; iter1--; Vec.erase(iter2); } } PrintVec(Vec); system("pause"); return 0; }
转载于:https://www.cnblogs.com/ll2008swu/archive/2012/10/07/2714193.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 成就DBA的职业生涯(转载)
- 【面试】海康威视 - 提前批 - AI算法工程师
- 【面试题整理】
- 【概率题汇总】互联网公司概率面试题整理
- 【面试】商汤科技 - CV研究员
- 深度学习 面试准备【一】
- 职业资格证书查询
- 面试回答技巧
- 一套深信服的面试试题
- 程序员的最高境界:呆若木鸡
- 程序员的开始
- 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹(详解)?
- 面试杂念
- 优秀的程序员是什么样
- 一道关于类加载顺序的面试题
- 计网面试总结 巨详细
- 记自己的第一次大厂面试的失败——阿里春招(2020毕业生)
- 【面试题009】斐波那契数列
- 【面试题010】二进制中1的个数
- 【面试题011】数值的整数次方