现在的位置: 首页 > 综合 > 正文

循环删除vector和map中的元素

2013年10月03日 ⁄ 综合 ⁄ 共 646字 ⁄ 字号 评论关闭

转载地址: http://www.cppblog.com/zgysx/archive/2006/12/28/16944.html

删除所有偶数项,并打印出删除的项
1. vector/queue
正确方法1:
void erase(vector<int> &v)
{
for(vector<int>::iterator vi=v.begin();vi!=v.end();)
{
if(*vi % 2 == 0)
{
cout << "Erasing " << *vi << endl;
vi = v.erase(vi);
}
else ++vi;
}
}

正确方法2:
void erase2(vector<int> &v)
{
for(vector<int>::reverse_iterator ri=v.rbegin();ri!=v.rend();)
{
if(*ri % 2 == 0)
{
cout << "Erasing " << *ri << endl;
v.erase((++ri).base()); //erase()函数期待的是正向iterator,故而这里要调
//用base()函数将逆向iterator转换为正向的
}
else ++ri;
}
}

2.map/list
正确方法
void erase(map<int,int> &m)
{
for(map<int,int>::iterator mi=m.begin();mi!=m.end();)
{
if(mi->second % 2 == 0)
{
cout << "Erasing " << mi->second << endl;
m.erase(mi++);
}
else ++mi;
}
}

抱歉!评论已关闭.