c++ 中 map的正确遍历
发布日期:2021-06-03 08:57:38
浏览次数:3
分类:技术文章
本文共 1606 字,大约阅读时间需要 5 分钟。
错误一:
int main(int argc, char* argv[]) { mapmapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc"; for (map ::iterator i=mapData.begin(); i!=mapData.end(); i++) { if (i->first == "b") { mapData.erase(i); } } return 0; }
错误: i指针在元素被删除后失效了,回到for语句中与mapData.end() 进行比较错误,这个一般都了解。
错误二:
int main(int argc, char* argv[]) { mapmapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc"; for (map ::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/) { if (i->first == "b") { mapData.erase(i/*++*/); } else { /*i++*/; } i++; } return 0; }
这同样是另外一个错误。i++操作主要做三件事: 1,首先把i备份一下; 2,然后把i加上1; 3,返回第一步备份的i。 我们来看这样的代码:
//earse以后,i已经失效,不能再用i++;
i++; 那么earse操作直接让i失效,对失效的i进行加一操作也是失效的。
正确代码:
int main(int argc, char* argv[]) { mapmapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc"; for (map ::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/) { if (i->first == "b") { mapData.erase(i++); } else { i++; } } return 0; }
解析:
这段代码的真正等效代码是:
map::iterator iterTemp = i; ++ i; mapData.earse(iterTemp);
在执行earse之前,i已经被加上1了,earse会是的以前的那个未被加一的i失效,而加了1之后的新的i是有效的。
PS:参考了一位大神的代码,感觉特别有效,贴出来和大家一起分享一下
转载地址:转载地址:https://blog.csdn.net/HuaCode/article/details/79738860 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月23日 18时10分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java 防渗透_「java、工程师工作经验怎么写」-看准网
2019-04-21
java中跳出当前循环怎么做_在java中,如何跳出当前的多重循环?
2019-04-21
java16下载_java lombok下载
2019-04-21
python 图像处理与识别书籍_Python图像处理之识别图像中的文字(实例讲解)
2019-04-21
java安全初始化_java安全编码指南之:声明和初始化
2019-04-21
java jstat gc_分析JVM GC及内存情况的方法
2019-04-21
php linux权限,Linux权限详细介绍
2019-04-21
典型环节的matlab仿真分析,典型环节的MATLAB仿真.doc
2019-04-21
Php contenttype类型,各种类型文件的Content Type
2019-04-21
php使用redis持久化,redis如何持久化
2019-04-21
php7.1解压包安装,【Swoole】php7.1安装swoole扩展
2019-04-21
linux centos删除安装的包,CentOS yum认为已删除的软件包仍在安装中
2019-04-21
酒店管理系统c语言带注释,酒店管理系统--C语言版.pdf
2019-04-21
c语言 实现sizeof功能,C语言简单实现sizeof功能代码
2019-04-21
c语言sin函数近似值,用泰勒公式求sin(x)的近似值
2019-04-21
c 语言登录系统源代码,c语言源代码---------------个人图书管理系统
2019-04-21