c++ 关于map的遍历 删除
来源:互联网 发布:国家网络安全法文件 编辑:程序博客网 时间:2024/05/18 21:42
begin 是指向第一个元素,end指向最后一个元素的下一个元素。
转自:http://blog.csdn.net/windren06/article/details/8141921#comments
首先下面这种做法是错误的:
- int main(int argc, char* argv[])
- {
- map<string, string> mapData;
- mapData["a"] = "aaa";
- mapData["b"] = "bbb";
- mapData["c"] = "ccc";
- for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); i++)
- {
- if (i->first == "b")
- {
- mapData.erase(i);
- }
- }
- return 0;
- }
下面这个是正确删除方法:
- int main(int argc, char* argv[])
- {
- map<string, string> mapData;
- mapData["a"] = "aaa";
- mapData["b"] = "bbb";
- mapData["c"] = "ccc";
- for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/)
- {
- if (i->first == "b")
- {
- mapData.erase(i++);
- }
- else
- {
- i++;
- }
- }
- return 0;
- }
这里贴出一个新的错误:
- int main(int argc, char* argv[])
- {
- map<string, string> mapData;
- mapData["a"] = "aaa";
- mapData["b"] = "bbb";
- mapData["c"] = "ccc";
- for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/)
- {
- if (i->first == "b")
- {
- mapData.erase(i/*++*/);
- }
- else
- {
- /*i++*/;
- }
- i++;
- }
- return 0;
- }
1、首先把i备份一下。
2、把i加上1。
2、返回第一步备份的i。
mapData.erase(i++);
在执行erase之前,i已经被加1了。erase会使得以前那个未被加一的i失效,而加了一之后的新的i是有效的。
mapData.erase(i); // erase以后 i已经失效,不能再用i++;
i++;那么erase操作直接让i失效,对失效的i进行加一操作也是失效的。
mapData.erase(i++);这段代码的真正等效代码是
map<string, string>::iterator iterTemp = i;
++i;
mapData.erase(iterTemp);
0 0
- 关于map的遍历 删除
- c++ 关于map的遍历 删除
- c++ 关于map的遍历 删除
- c++ 关于map的遍历 删除
- 关于c++ vector和map的遍历和删除对象
- c++ 关于map的遍历 删除(转载)
- 关于map的遍历
- map的遍历与删除
- C++map遍历删除数据(删除被2整除的键值对)
- 关于Map集合的遍历
- 关于map的循环遍历
- stl map高效遍历删除的方法
- 遍历删除map中元素的方法
- c++ 遍历map的时候删除元素
- stl map高效遍历删除的方法
- stl map遍历和删除的方法
- stl map高效遍历删除的方法
- map的遍历及删除元素
- iOS开发,调用打电话,发短信,打开浏览器
- 怎么使用胃肠病治疗仪
- 手机通讯录的实现
- JAVA 学习第八天
- Android平台刷新cache flush
- c++ 关于map的遍历 删除
- The Pursuit of Happyness
- Android软件测试的日志文件抓取简介
- 开闭原则的理解
- V$UNDOSTAT and V$ROLLSTAT 需要整理的
- C#如何实现DataGridView到DataGridView的拖拽
- 全排列生成算法:next_permutation
- 学习Swift中的CoreImage(图形核心编程)
- C#中dynamic的正确用法