首页 > 其他分享 >前置++和后置++(--也一样)

前置++和后置++(--也一样)

时间:2023-08-22 22:23:20浏览次数:34  
标签:后置 ++ auto 前置 mapTest iter --

  • 前置++表示先对对象加1,然后返回加1后的值
  • 后置++表示先对对象的运算之前的值的副本保存下来,然后对对象加1,然后返回对象运算之前的副本
  • 以上两点可以看出前置++返回的是对象本身,它是一个左值,后置版本返回的是副本它是一个临时量,它是一个右值,因此可以对前置++的结果进行改变,而不可以对后置++的结果进行改变(左值可以改变,可以取地址,右值不可以)
  • 后置++通常运用到容器中,以防访问到不可访问的值
1 //输出vector对象知道遇到第一个负值
2 auto pbeg=v.begin();
3 while(pbeg!=v.end()&&*pbeg>=0)
4     cout<<*pbeg++<<endl;//假定没有负值,pbeg++后已经指向尾后元素但是解引用的是最后一个元素

 

下面给出一段问题代码:

1 for(auto iter=mapTest.begin();iter!=mapTest.end();++iter)//或则iter++
2 {  
3   cout<<iter->first<<":"<<iter->second<<endl;  
4   mapTest.erase(iter);  
5 }

问题在于,容器不可以使用已经删除的元素对应的迭代器,上例中本次循环使用了迭代器删除了其对应的元素,接着对这个删除了的元素的迭代器进行++操作进入了下一次的循环。

解决方法是边删除边后置++

1 for(auto iter=mapTest.begin();iter!=mapTest.end();) //注意此处不能再写iter++  
2 {  
3 cout<<iter->first<<":"<<iter->second<<endl;  
4 mapTest.erase(iter++);  //先将iter运算之前的值的副本保存下来,然后对iter加1,最后将iter运算之前的值返回给函数,实现对迭代器对应位置删除的操作
5 } 

参考文章

c++:map容器中erase()的坑_c++ map erase_网格小生的博客-CSDN博客

 

标签:后置,++,auto,前置,mapTest,iter,--
From: https://www.cnblogs.com/Sandals-little/p/17649846.html

相关文章

  • 测试平台 之 缩减版
    后端测试平台:1、连接数据库,定义数据库表字段与创建表2、使用curl命令将测试脚本上传到平台数据库3、使用curl命令获取保存在平台数据库中的测试脚本,并保存在本地且命名4、带参数接口调用jenkins,jenkins执行测试脚本勾选Thisprojectisparameterized......
  • perlapp BFS格式分析
    perlappBFS格式分析1、加载资源中加密的BFSLoadResource_BFS_406670LPVOID*__fastcallLoadResource_BFS_406670(char*Source){//[COLLAPSEDLOCALDECLARATIONS.PRESSKEYPADCTRL-"+"TOEXPAND]v2=(BFS**)malloc(0x28ui64);v3=v2;if(!v2)r......
  • Jmeter(二十八)加密接口测试笔记
    一、加密接口测试场景1、例如登录操作,输入账号密码,返回token,token是需要加密的2、Jmeter本身没有加解密函数工具二、加密接口和普通接口有什么区别1、发送出去的数据需要进行额外处理,接口测试工具通常不具备这个功能三、如何测试加密接口1、测试数据准备......
  • 为 VitePress 网站添加 RSS 订阅支持
    省流:使用vitepress-plugin-rss这个插件前言在看许多个人博客站点的时候,右上角总会有个RSS订阅的标志恰好我的博客也是基于VitePress搭建的,就想看看能不能也实现这个功能呢?动手前先搜了一下,先是看到了vitepress-blog-zaun上有这个RSS的实现支持,再搜了一下发现Vue的官方博......
  • Ubuntu 20.04编译opencv-3.1.0时报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not dec
    Ubuntu20.04源码编译安装opencv320报错error:'CODEC_FLAG_GLOBAL_HEADER'wasnotdeclaredinthisscope的解决办法:修改/opt/opencv/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp,顶端添加如下代码:#defineAV_CODEC_FLAG_GLOBAL_HEADER(1<<22)#defineCODEC_F......
  • 2023.8.22
    今天没看多少东西,一是因为明天的竞赛,感觉竞赛前看太多新东西不太好,二是因为最近光看ctfwiki学习学得有点...额,力不从心了吧,目前在找其他的一些解决方案看了一些以前做过的pwn题,从学长的exp里吸取了一些经验明天准备竞赛......
  • 断言
    packagecom.mytest;importorg.junit.jupiter.api.DisplayName;importorg.junit.jupiter.api.Test;importstaticorg.junit.jupiter.api.Assertions.*;publicclassFirstCaseTest{@Test@DisplayName("用例1")voidtest1(){System......
  • PROC SQL 006
    在前面的几个章节中,我们介绍了查询语句的基本用法,这一节,我们介绍查询语句语句中的排序和分组。排序如果我们希望将查询结果展现在窗口中,或者输出至外部文件以供他人查看,那么有可能会涉及到对查询结果的排序。PROCSQL使用ORDERBY子句进行排序。PROCSQL的排序非常灵活,支持......
  • apache spark connect 试用
    sparkconnect3.4开始就支持了connect模式,3.4.1比较稳定了connectserver启动实际上就是一个spark引用,通过spark_submit提交到spark环境中启动./sbin/start-connect-server.sh--packagesorg.apache.spark:spark-connect_2.12:3.4.1查看效果......
  • PQ-Tree
    为什么NOIP模拟会考到这种东西啊?PQ-Tree能解决也恐怕仅能解决如下问题:对于长度为\(n\)的排列\(p\),在线地给出\(q\)个限制,每次给定一个集合\(S\),要求在\(p\)中,\(S\)中的所有数出现位置构成一个连续段,要求对排列计数。朴素实现的PQ-Tree可以给出一个\(O(nq)\)的......