c++迭代器失效

来源:互联网 发布:淘宝美工学院 编辑:程序博客网 时间:2024/05/13 10:39
 一般来讲,如果在程序中对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等也是类似的道理,总之记住本文开头的那句话就木有问题了。
 
0 0
原创粉丝点击