*************************************为什么会coredump 呢?
erase 导致,谁解释下,怎样改?
#include <iostream>
#include <list>
using namespace std;
int main()
{
list <int> listTest;
listTest.push_back(1);
list <int> ::iterator iter;
for(iter =listTest.begin();iter!=listTest.end();iter++)
{
if (*iter==1)
{
listTest.erase(iter);
continue;
}
cout < < "no iter is 1 " < < endl;
}
return 0;
}
[解决办法]
这个是标准的,只要你用的是符合标准的编译器,比如g++3.4.2,比如vc++8.0
#include <iostream>
#include <list>
using namespace std;
int main()
{
list <int> listTest;
listTest.push_back(1);
for( list <int> ::iterator iter=listTest.begin(); iter!=listTest.end(); )
{
if( *iter == 1 )
iter = listTest.erase(iter);
else
++iter;
}
return 0;
}
这个是取巧的,vc++6.0估计也可以
#include <iostream>
#include <list>
using namespace std;
int main()
{
list <int> listTest;
listTest.push_back(1);
for( list <int> ::iterator iter=listTest.begin(); iter!=listTest.end(); )
{
if( *iter == 1 )
listTest.erase(iter++);
else
++iter;
}
return 0;
}
[解决办法]
list <int> listTest;
listTest.push_back(1);
listTest.remove(1);
[解决办法]
删了后,iter失效了.
因为listTest里只有一个元素,即使使用iter = listTest.erase(iter);
执行后,iter指向end的下一个元素,然后再执行iter++的时候就出界了。所以出错。
bruceteen(周星星)的程序可以,不过remove完全可以实现楼主想要的功能。
[解决办法]
常见错误:迭代器失效.
[解决办法]
也来凑热闹
#include <iostream>
#include <list>
using namespace std;
bool equal1 ( int value ) {
return value==1;
}
int main()
{
list <int> listTest;
listTest.push_back(1);
for (int j=1;j <=3;++j){
for (int i=1;i <=5;++i) listTest.push_back(i);
}
listTest.remove_if(equal1);
return 0;
}
[解决办法]
迭代器在容器元素增减后,
原来的迭代器将失效,
请使用 容器操作返回 的迭代器 ~