我要轮询链表删除符合条件的节点
如下代码可以运行,删除指定的节点,我也认为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")对话框出现的次数是一样的。
我哪里写错了呢?

解决方案 »

  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");
        }
      

  2.   

    这样调试也太囧了int nSize = ObList.size();
     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值有变化没
      

  3.   

    to wocow3 
    你的调试方法还是很好的