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
*/
以上就是小编为大家带来的小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧全部内容了,希望大家多多支持毛票票~