您的位置:首页 > 编程语言 > C语言/C++

c++迭代器失效

2014-02-19 20:40 525 查看
 一般来讲,如果在程序中对vector中的元素做了修改,添加或者删除元素之后,迭代器就会失效,这时候就不要使用迭代器了 或者 只需插入后重新把迭代器定位好即可。
void vectorTest1()
{
vector<int> container;
for (int i = 0; i < 10; i++)
{
container.push_back(i);
}

vector<int>::iterator iter;
for (iter = container.begin(); iter != container.end();iter++)
{
if (*iter > 3)
{
iter = container.erase(iter);
//break;
}
}

for (iter = container.begin(); iter != container.end(); iter++)
{
cout<<*iter<<endl;
}
}
上面的这段代码就是因为在erase掉迭代器,使其失效后,仍然对其做自增操作。
而但是erase方法可以返回下一个有效的iterator。所以,可以采取
void vectorTest()
{
vector<int> container;
for (int i = 0; i < 10; i++)
{
container.push_back(i);
}

vector<int>::iterator iter;
for (iter = container.begin(); iter != container.end(); )
{
if (*iter > 3)
iter = container.erase(iter);    //erase的返回值是删除元素下一个元素的迭代器
else{
iter++;
}
}

for (iter = container.begin(); iter != container.end(); iter++)
{
cout<<*iter<<endl;
}
}


list,map等也是类似的道理,总之记住本文开头的那句话就木有问题了。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: