如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
C++STL中erase函数的用法求助~~悬赏分:20-解决时间:2009-5-1018:43请大家来看一下这个erase函数到底怎么用这个程序编译倒是能通过可运行时会显示错误“嘭”一声弹出个对话框DebugAssertionFailed!我觉得肯定是erase函数用法不对可是找不到错误在哪儿请大家指导一下了~~~对了程序功能是删除vector对象中的偶数和list对象中的奇数#include<iostream>#include<vector>#include<list>usingnamespacestd;intmain(){intia[10]={2,3,4,5,6,7,8,9,10,11};vector<int>ivec(ia,ia+10);//定义一个vector对象ivecvector<int>::iteratoriter=ivec.begin();list<int>lvec(ia,ia+10);//定义一个list对象lveclist<int>::iteratorlter=lvec.begin();while(iter!=ivec.end()&<er!=lvec.end()){if(*iter%2==0)ivec.erase(iter);if(*lter%2!=0)lvec.erase(lter);++iter;++lter;}for(iter=ivec.begin();iter!=ivec.end();++iter)cout<<*iter<<"";cout<<endl;for(lter=lvec.begin();lter!=lvec.end();++lter)cout<<*lter<<"";cout<<endl;system("PAUSE");return0;}提问者:HYPERLINK"http://passport.baidu.com/?business&aid=6&un=%D0%D9%D1%C0%C0%FB%C3%FC%C3%FB%B7%A8"\l"2"\t"_blank"匈牙利命名法-HYPERLINK"http://www.baidu.com/search/zhidao_help.html"\l"如何选择头衔"\t"_blank"二级最佳答案对于vector一般不要用erase(),因为很多情况下他要和<algorithm>中的remove()一块用!erase()的使用会使迭代器失效如果删除的不是最后面的元素的话。你的程序中if(*iter%2==0)ivec.erase(iter);可以换成:(记着加头文件<algorithm>)if(*iter%2==0)ivec.erase(remove(ivec.begin(),ivec.end(),*iter),ivec.end())但如果你用if(*iter%2!=0)ivec.erase(remove(ivec.begin(),ivec.end(),*iter),ivec.end())输出结果则包含11,结果错误!不知道你为什么数组,向量,链表都用,为了和你一致,我也只能改成这样:#include<iostream>#include<vector>#include<list>#include<algorithm>#include<functional>#include<iterator>usingnamespacestd;intmain(){vector<int>ivec;list<int>ilis;intvec[]={2,3,4,5,6,7,8,9,10,11};remove_copy_if(vec,vec+10,back_inserter(ivec),bind2nd(modulus<int>(),2));remove_copy_if(vec,vec+10,back_inserter(ilis),not1(bind2nd(modulus<int>(),2)));for(vector<int>::const_iteratoriter=ivec.begin();iter!=ivec.end();++iter)cout<<*iter<<'\t';cout<<endl;for(list<int>::const_iteratorliter=ilis.begin();liter!=ilis.end();++liter)cout<<*liter<<'\t';cout<<endl;}最好的做法是:#include<iostream>#include<vector>#include<list>#inc