我要轮询链表删除符合条件的节点
如下代码可以运行,删除指定的节点,我也认为stl的list使用没有错误。#include <list>
#include <iostream>
#include <algorithm>
using namespace std;struct Object
{
int num;
int classtype;
};int main()
{
list<Object> ilist;
Object ob; ob.num=1;
ob.classtype=1;
ilist.push_back(ob);
ob.num=2;
ob.classtype=2;
ilist.push_back(ob);
ob.num=3;
ob.classtype=3;
ilist.push_back(ob);
ob.num=4;
ob.classtype=4;
ilist.push_back(ob);
ob.num=5;
ob.classtype=5;
ilist.push_back(ob);
list<Object>::iterator ite;
for(ite=ilist.begin();ite!=ilist.end();++ite)
cout<<(*ite).classtype<<" "<<(*ite).num<<" ";
cout<<endl;
for(ite=ilist.begin();ite!=ilist.end();)
{
if((*ite).num==1 || (*ite).classtype==4)
{
ite=ilist.erase(ite);
}
else
ite++;
} for(ite=ilist.begin();ite!=ilist.end();++ite)
cout<<(*ite).classtype<<" "<<(*ite).num<<" ";
cout<<endl; return 0;
}
可是用到项目里类似的代码就有问题了,它没有删除我要求删除的节点, for(ite=ObList.begin();ite!=ObList.end();)
{
AfxMessageBox("1");
if((*ite).m_x[0]==400 && (*ite).m_y[0]==200)
{
AfxMessageBox("2");
//ite=ObList.erase(ite);
ite=ObList.erase(ite);
AfxMessageBox("3");
//break;
}
else
ite++;
AfxMessageBox("4");
} for(ite=ObList.begin();ite!=ObList.end();ite++)
{
AfxMessageBox("5");
}
AfxMessageBox("5")和AfxMessageBox("1")对话框出现的次数是一样的。
我哪里写错了呢?
如下代码可以运行,删除指定的节点,我也认为stl的list使用没有错误。#include <list>
#include <iostream>
#include <algorithm>
using namespace std;struct Object
{
int num;
int classtype;
};int main()
{
list<Object> ilist;
Object ob; ob.num=1;
ob.classtype=1;
ilist.push_back(ob);
ob.num=2;
ob.classtype=2;
ilist.push_back(ob);
ob.num=3;
ob.classtype=3;
ilist.push_back(ob);
ob.num=4;
ob.classtype=4;
ilist.push_back(ob);
ob.num=5;
ob.classtype=5;
ilist.push_back(ob);
list<Object>::iterator ite;
for(ite=ilist.begin();ite!=ilist.end();++ite)
cout<<(*ite).classtype<<" "<<(*ite).num<<" ";
cout<<endl;
for(ite=ilist.begin();ite!=ilist.end();)
{
if((*ite).num==1 || (*ite).classtype==4)
{
ite=ilist.erase(ite);
}
else
ite++;
} for(ite=ilist.begin();ite!=ilist.end();++ite)
cout<<(*ite).classtype<<" "<<(*ite).num<<" ";
cout<<endl; return 0;
}
可是用到项目里类似的代码就有问题了,它没有删除我要求删除的节点, for(ite=ObList.begin();ite!=ObList.end();)
{
AfxMessageBox("1");
if((*ite).m_x[0]==400 && (*ite).m_y[0]==200)
{
AfxMessageBox("2");
//ite=ObList.erase(ite);
ite=ObList.erase(ite);
AfxMessageBox("3");
//break;
}
else
ite++;
AfxMessageBox("4");
} for(ite=ObList.begin();ite!=ObList.end();ite++)
{
AfxMessageBox("5");
}
AfxMessageBox("5")和AfxMessageBox("1")对话框出现的次数是一样的。
我哪里写错了呢?
for(ite=ObList.begin();ite!=ObList.end();)
{
AfxMessageBox("1");
if((*ite).m_x[0]==400 && (*ite).m_y[0]==200)
{
AfxMessageBox("2");
ite=ObList.erase(ite);
AfxMessageBox("3");
}
else
ite++;
AfxMessageBox("4");
} for(ite=ObList.begin();ite!=ObList.end();ite++)
{
AfxMessageBox("5");
}
for(ite=ObList.begin();ite!=ObList.end();)
{
if((*ite).m_x[0]==400 && (*ite).m_y[0]==200)
{
ite=ObList.erase(ite);
}
else
ite++;
}nSize = ObList.size();调试看看nSize值有变化没
你的调试方法还是很好的