读书人

vector的erase有关问题

发布时间: 2012-02-25 10:01:48 作者: rapoo

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++效率高一点。

读书人网 >C++

热点推荐