迭代器遍历删除的正确用法
vector<int> veci;
for (vector<int>::iterator iter = veci.begin(); iter != veci.end(); )
{
if (*iter == 3)
iter = veci.erase(iter);
else
iter++;
}
二维vector的迭代器遍历删除
vector<vector<OrderLogin>>::iterator itm = MSOrders.begin();
while (itm != MSOrders.end())
{
MSOrderEraseFlag = 0;
if ((*itm)[0].login == masterLogin)
{
vector<OrderLogin>::iterator its = (*itm).begin();
while (its != (*itm).end())
{
if ((*its).login == subLogin)
{
its = (*itm).erase(its); //解除订单关系,且迭代器后移
if ((*itm).size() == 1) //关系中只剩master订单则删除对应关系表
{
itm = MSOrders.erase(itm); //删除并自动后移
MSOrderEraseFlag = 1;
}
break;
}
else //后移
{
its++;
}
}
if (MSOrderEraseFlag == 1)
{
break;
}
}
if (MSOrderEraseFlag != 1) //如果没有被整条删除
{
itm++; //后移
}
}