vector, list, map在遍历时删除符合条件的元素实现方法
直接看源码,内有详细解释
/* 测试vector,list,map遍历时删除符合条件的元素 本代码测试环境:ubuntu12+win7_x64 */ #include<iostream> #include<vector> #include<list> #include<map> #include<iterator> usingnamespacestd; voidRemove1(vector<int>&vec,intnum) { for(vector<int>::iteratorit=vec.begin();it!=vec.end();) { if(*it==num) it=vec.erase(it); else it++; } } voidRemove2(list<int>&lst,intnum) { list<int>::iteratorit; for(it=lst.begin();it!=lst.end();) { if(*it==num) { lst.erase(it++); } else it++; } } voidinitMap(map<int,int>&m,intarr[],intarrLen) { for(inti=0;i<arrLen;i++) m[i]=arr[i]; } voidRemove_map(map<int,int>&m,intnum) { map<int,int>::iteratorit; for(it=m.begin();it!=m.end();) { if(it->second==num) m.erase(it++); else it++; } } voiddisplayMap(map<int,int>&m) { map<int,int>::iteratorit=m.begin(); while(it!=m.end()) { cout<<"key="<<it->first<<",value="<<it->second<<endl; it++; } cout<<endl; } intmain(void) { intarr[]={1,3,5,5,5,13,7,5,7,9}; intarrLen=sizeof(arr)/sizeof(arr[0]); #if1 //testvector vector<int>vec(arr,arr+arrLen); Remove1(vec,5); copy(vec.begin(),vec.end(),ostream_iterator<int>(cout,"")); cout<<endl<<endl; #endif //testlist list<int>lst(arr,arr+arrLen); Remove2(lst,5); copy(lst.begin(),lst.end(),ostream_iterator<int>(cout,"")); cout<<endl<<endl; //testmap map<int,int>m; initMap(m,arr,arrLen); Remove_map(m,5); displayMap(m); return0; } /* Win7_x64运行结果: 1313779 1313779 key=0,value=1 key=1,value=3 key=5,value=13 key=6,value=7 key=8,value=7 key=9,value=9 Ubuntu12运行结果: [zcm@cpp#54]$make g++-Wall-Os-DLINUX-oaa.cpp [zcm@cpp#55]$./a 1313779 1313779 key=0,value=1 key=1,value=3 key=5,value=13 key=6,value=7 key=8,value=7 key=9,value=9 */
以上就是小编为大家带来的小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧全部内容了,希望大家多多支持毛票票~