std::map 通过遍历删除满足某些条件元素的两种方式
来源:互联网 发布:为什么mac没有腾讯视频 编辑:程序博客网 时间:2024/06/06 07:08
方法一:
std::map<std::string, std::string > mapTest;bool TestVal(const std::string & val);......std::map<std::string, std::string >::iterator it = mapTest.begin();while(it != mapTest.end()){ if(TestVal(it->second)) { it = mapTest.erase(it); } else it++;}...........在这种方式中,通过std::map的erase方法在释放了it后会返回指向下一个元素的指针来获取最新的iterator
方法二:
std::map<std::string, std::string > mapTest;bool TestVal(const std::string & val);......std::map<std::string, std::string >::iterator it = mapTest.begin();while(it != mapTest.end()){ if(TestVal(it->second)) { mapTest.erase(it++); } else it++;}...........该方法中利用了后++的特点,这个时候执行mapTest.erase(it++);这条语句分为三个过程
1、先把it的值赋值给一个临时变量做为传递给erase的参数变量
2、因为参数处理优先于函数调用,所以接下来执行了it++操作,也就是it现在已经指向了下一个地址。
3、再调用erase函数,释放掉第一步中保存的要删除的it的值的临时变量所指的位置。
如果只是mapTest.erase(it); 当这条语句执行完后,it就是一个非法指针,如果再执行++就会出错
总结,虽然上面两种方法达到了一个相同的效果,但是,更提倡使用第二种,第一种方法只适用于windows平台,并不是标准库的支持。
- std::map 通过遍历删除满足某些条件元素的两种方式
- std::map 通过遍历删除满足某些条件元素的两种方式
- std::map 通过遍历删除满足某些条件元素的两种方式
- std::map遍历删除某些元素问题
- std::map 删除指定条件的元素
- Map遍历的两种方式(首推entrySet())--遍历Map时删除元素的方法
- C++遍历中删除std::map元素
- C++遍历中删除std::map元素
- 测试对Vector容器,遍历元素删除满足条件元素,而进行Erase()操作的效率
- Python:找到列表中满足某些条件的元素
- map的四种遍历方式,map遍历元素
- map遍历的两种方式
- Map集合的两种遍历方式
- java map的两种遍历方式
- java map的两种遍历方式
- map的两种遍历方式
- 遍历Map集合的两种方式
- Map集合的两种遍历方式
- Asp.net获取当前目录的三种方法
- Visual Assist X 10.6.1837完美破解版(带VS2010破解)
- Jmock和Junit4结合进行mock测试
- *(p+i)【 i为位移量 】
- HTTP协议详解
- std::map 通过遍历删除满足某些条件元素的两种方式
- 让CAS退出后返回指定的页面
- 第三章 数组的解剖学
- 详解java学习中堆与栈的内容
- Actors in Scala(Scala中的Actor)(预打印版) 第六章 Exception Handling, Actor Termination and Shutdown(A)
- javascript的window.onload与jquery的$(document).ready()
- 两个错误
- MIX是二进制-十进制混合计算机
- lrs_save_param_ex的用法