Chapter 20.简单的erase后迭代器失效处理

来源:互联网 发布:linux ping的使用 编辑:程序博客网 时间:2024/06/05 06:22

顺序容器erase失效处理

对vector、list、deque都适用

//method 1.for(auto iter = iVec.begin(); iter != iVec.end();){if(*iter == 100){iter=iVec.erase(iter);//iter返回的是erase位置处的下一个元素的迭代器}else{++iter;}}
//method 2.for(auto iter = iVec.begin(); iter != iVec.end();++iter){if(*iter == 100){iter=iVec.erase(iter);iter=iVec.begin();//重新整理iVec}}

关联容器map erase失效处理

map中不同的key中value可能相同,比如value用作标记
map<string,bool> bMap中,想把bMap->second==false的全删除,
下面的写法就有了用处 

//method 1.for(auto it=bMap.begin(); it != bMap.end();){if(it->second == flase){bMap.erase(it++);//erase返回的是void,不能用顺序容器的方式}else{++it;}}
//method 2.for (auto it=bMap.begin() ; it != bMap.end();++it){if( it->second == false){bMap.erase(it);it=bMap.begin();//重新整理bMap}}

原创粉丝点击