共有60个数:

for (iter_i =  listNumber.begin(); iter_i != listNumber.end(); iter_i++)
{  
  if(!ISBIGNUMBER(*iter_i))
  listNumber.erase(iter_i);
  //listNumber.remove(*iter_i);   这两句都是错的?有错误提示
 ATLTRACE("%d ,", *iter_i);
}erase和
remove
都不能删除成功。怎么办呢?

解决方案 »

  1.   

    list里面的remove和erase函数的作用基本相同。都可以删除掉那个成员。不过你的问题是list的成员被删除后,它的++操作,就变空了,所以出现异常。  
    for (iter_i =  listNumber.begin(); iter_i != listNumber.end(); )

      if(!ISBIGNUMBER(*iter_i))
      listNumber.erase(iter_i++);
      //listNumber.remove(*iter_i);  这两句都是错的?有错误提示
     ATLTRACE("%d ,", *iter_i);
    }
    这样应该就可以了!
      

  2.   

    不要把 iter_i++ 放for里面,erase操作后,不能再++
    for (iter_i =  listNumber.begin(); iter_i != listNumber.end(); )

      if(!ISBIGNUMBER(*iter_i))
          iter_i=listNumber.erase(iter_i);
      else
          iter_i++;
     ATLTRACE("%d ,", *iter_i);
    }注意枚举器的使用
      

  3.   

    remove_if (listNumber.begin(),listNumber.end(),ISBIGNUMBER)
      

  4.   

    listNumber.remove_if(ISBIGNUMBER)remove_if (listNumber.begin(),listNumber.end(),ISBIGNUMBER)哈.
      

  5.   

    iter_i = listNumber.erase(iter_i);