关于迭代器的面试题

#include <vector>
#include <iterator>
#include <iostream>
using namespace std;

void printMy(vector<int>);

int main()
{
vector<int> vecInt;
vecInt.push_back (1);
vecInt.push_back (6);
vecInt.push_back (6);
vecInt.push_back (3);

vector<int>::iterator itor;
vector<int>::iterator itor2;
itor=vecInt.begin ();
for(itor=vecInt.begin ();itor!=vecInt.end ();)
{
if(6==*itor)
{
itor2=itor;
vecInt.erase (itor2);
}itor++;
}
printMy(vecInt);
return 0;
}

void printMy(vector<int> vec)
{
cout<<"\nvector size is:"<<vec.size ()<<endl;
vector<int>::iterator p=vec.begin ();
}

问输出是几?

在dev编译运行以后,结果是3,程序员面试宝典是这样解析的:这是迭代器的问题,只能删除第一个6,以后迭代器就失效了,不能删除以后的元素。itor2=itor;这句说明两个迭代器指向是一样的。vecInt.erase (itor2);等于vecInt.erase (itor);,这是指针已经指向下一个元素6了。itor++;又自增,指向下一个元素3,略过了第二个6.我做出了以下修改方法:将循环做如下修改:

if(6==*itor)
{
itor2=itor;
vecInt.erase (itor2);
itor--;
}itor++;

此时结果即为2

 

posted @ 2012-08-22 15:39  SA高处不胜寒  阅读(557)  评论(0编辑  收藏  举报