c++ 中 map的正确遍历
发布日期:2021-06-03 08:57:38 浏览次数:3 分类:技术文章

本文共 1606 字,大约阅读时间需要 5 分钟。

错误一:

int main(int argc, char* argv[])  {      map
mapData; 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[])  {      map
mapData; 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。
我们来看这样的代码:
mapData.earse(i);
//earse以后,i已经失效,不能再用i++;
i++;
那么earse操作直接让i失效,对失效的i进行加一操作也是失效的。


正确代码:

int main(int argc, char* argv[])  {      map
mapData; 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; }

解析:

mapData.erase(i++);
这段代码的真正等效代码是:

map
::iterator iterTemp = i; ++ i; mapData.earse(iterTemp);

在执行earse之前,i已经被加上1了,earse会是的以前的那个未被加一的i失效,而加了1之后的新的i是有效的。


PS:参考了一位大神的代码,感觉特别有效,贴出来和大家一起分享一下

转载地址:

转载地址:https://blog.csdn.net/HuaCode/article/details/79738860 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:scrapy运行问题:IndexError: list index out of range
下一篇:Django命令行创建超级用户(Django管理)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月23日 18时10分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java 防渗透_「java、工程师工作经验怎么写」-看准网 2019-04-21
java中跳出当前循环怎么做_在java中,如何跳出当前的多重循环? 2019-04-21
java程序中执行maven_java – 将一个enviornment变量传递给Maven中的已执行进程 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 pclzip.lib.php,php使用pclzip类实现文件压缩的方法(附pclzip类下载地址) 2019-04-21
php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。... 2019-04-21
jdk 1.8 java.policy,JDK1.8 导致系统报错:java.security.InvalidKeyException:illegal Key Size 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