笔试题目搜集(5)
1.下面printf执行的结果
#include <iostream>#include <vector>using namespace std;void print(vector<int>ivec){vector<int>::iterator iter;for(iter=ivec.begin(); iter!=ivec.end();++iter){cout<<*iter<<" ";}}int main(){vector<int>ivec;ivec.push_back(1);ivec.push_back(6);ivec.push_back(6);ivec.push_back(5);vector<int>::iterator iter1,iter2;for(iter1=ivec.begin(); iter1!=ivec.end();){if(*iter1 == 6){iter2 = iter1;ivec.erase(iter2);--iter1;}++iter1;}print(ivec);system("pause");}这是一个迭代器失效问题,只能删除第一个6以后的迭代器就失效了,不能删除后面的元素了。iter2=iter1,这句说明iter1和iter2是一样的,erase(iter2),这时指针已指向下一个元素6了,在iter1++,指向了元素3.