64,683
社区成员
发帖
与我相关
我的任务
分享
vector<AA>::iterator ite = vaa.begin();
for (; ite != vaa.end(); )
{
if (find(intList.begin(), intList.end(),ite->n) != intList.end())
vaa.erase(++ite);
else
++ite;
}
一运行就会发现不行了, vector的erase的特点是, 被删除的元素和之后的所有元素的iterator都失效了, 即使保存了后面一个iterator, 也不能继续遍历了
vector<AA>::iterator ite = vaa.begin();
for (; ite != vaa.end(); )
{
if (find(intList.begin(), intList.end(),ite->n) != intList.end())
ite = vaa.erase(ite);
else
++ite;
}
vaa.erase(++ite);
ite =vaa.erase(ite);
iterList=lst.erase(iterList);
要没有加加。#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
int arrVec[]={1,2,3};
int arrLst[]={2,2,1,4,3,2,6};
vector<int> vec(arrVec,arrVec+3);
list<int> lst(arrLst,arrLst+7);
for(vector<int>::const_iterator iter=vec.begin();iter!=vec.end();++iter)
{
list<int>::iterator iterList=lst.begin();
while( ( iterList=find(iterList,lst.end(),*iter) )!=lst.end() )
{
iterList=lst.erase(iterList);
}
}
for(list<int>::iterator iter=lst.begin();iter!=lst.end();++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
return 0;
}
vector<AA>::iterator ite = vaa.begin();
for (; ite != vaa.end(); )
{
if (find(intList.begin(), intList.end(),ite->n) != intList.end())
vaa.erase(ite++);
else
++ite;
}
vector<int> mveci;
mveci.push_back(1);
mveci.push_back(2);
mveci.push_back(3);
for (vector<int>::iterator citer = mveci.begin();citer != mveci.end(); )
{
if (2 == *citer)
{
mveci.erase(citer++);
}
else
citer++;
}