首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vector的erase有关问题

2012-02-25 
vector的erase问题我想遍历vector的时候动态的删掉一些节点不过在删除以后迭代器会出问题我做了一个实验是

vector的erase问题
我想遍历vector的时候动态的删掉一些节点   不过在删除以后   迭代器会出问题   我做了一个实验   是这样的
void   main()
{
vector <int>   v;
vector <int> ::iterator   it;
int   i[4]={1,3,2,4};
int   a;
for(a=0;a <4;a++)
{
v.push_back(a[i]);
}
for(it=v.begin();it!=v.end();it++)
{
if(*it> 2)
v.erase(it);
}
}

该怎么解决呢?

[解决办法]
erase会返回删除后的下一个节点 你可以从这里继续循环
[解决办法]
erase方法返回指向被删除元素下一个元素的迭代器,因此你的循环可以这样写:
for(it=v.begin();it!=v.end();)
{
if(*it> 2)
{
it = v.erase(it);
}
else
{
++it;
}
}

另外,++it应该比it++效率高一点。

热点排行