C++ 复位容器迭代器,真晕了~~~~

来源:百度知道 编辑:UC知道 时间:2024/09/23 08:21:59
我先把题目写出来好了:
----------------------------------------
假设有如下ia的定义,将ia复制到一个vector容器和一个list容器中,使用单个送代器参数版本的erase函数将list容器中的奇数值元素删除掉,然后将vector容器中的偶数值删除掉
---------------------------------------
看起来挺简单滴,我是这么写的:
-------------------------------------
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
using namespace std;
main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
vector<int> iter;
list<int> ll;
int yy=sizeof(ia)/sizeof(int);
int hh=0;
cout<<"1"<<endl;
while(hh!=yy)
{
iter.push_back(ia[hh]);
++hh;
}
cout<<"2"<<endl;
int kk=0;
while(kk!=yy){
ll.push_back(ia[kk]);
++kk;
}
cout<<"3"<<endl;
vector<int>::iterator pp=iter.begin(),oo=iter.end();
int as=0;
while(!

**********************************************************************************
//实际操作一次来看吧
//假设这个长度为11的list里只有第五个是我们要删除的
//在前四个中,没有找到的时候迭代器只要向来移就可以了.
//找到的情况就需要重新定位迭代器了.
while(aa != ll.end())
{

if(*aa%2!=0) //找到第五个了
{
ll.erase(aa); //删除操作第五个
deleteNumCount++; //删除计数递增
aa = ll.begin(); //重定位迭代器到开始
//这时我们已经遍历了五个无素即ss = 5;
//一共删除了一个无素,即deleteNumCount = 1;
//ss-deleteNumCount = 4,即有四个元素是我们遍历了,但是不用删除的.
//所以我们要将迭代器重新指向4,因为删除了一个元素,所以先前的第五个元素变成了现在的第四个元素.
for (int i = 0; i < ss-deleteNumCount; i++)
{
aa++; //这里最终要加3次,i=4时跳出循环
}
}
else //偶数
{
++aa;
}
++ss; //遍历计数器 ,这是无论找到了没有都要加的.最终结果是最开始元素的个数
}
*********************************************************************************
**********************************************************************************
while(aa != ll.end())
{