注意:此程序在win环境下会出现上述描述的问题;在mac环境下第一种方式是正常运行的。Map.erase有3个重载函数:

void erase(iterator position);

size_type erase(const key_type& x);  // 这个如果size_type为int,则返回值为1时代表删除成功,为0代表删除失败。

void erase(iterator first, iterator last);   // 相当于map.clean()。

1. 错误示范

备注:map是关联式容器,调用erase后,当前迭代器已经失效

  std::map<int, int> mmap;
mmap[] = ;
mmap[] = ;
mmap[] = ;
mmap[] = ; std::map<int, int>:: iterator it = mmap.begin();
for( ; it!=mmap.end(); it++)
{
if(it->first == )
{
mmap.erase(it); //执行后,it失效,程序崩溃。
}
}

2. 正确示范(1)

 std::map<int, int> mmap;
mmap[] = ;
mmap[] = ;
mmap[] = ;
mmap[] = ; std::map<int, int>:: iterator it = mmap.begin();
for( ; it!=mmap.end(); it++)
{
if(it->first == )
{
mmap.erase(it++); // erase之后,令当前迭代器指向其后继。
}
}

3. 正确示范(2)

备注:利用erase的返回值,注意,有些版本的stl-map没有返回值,比如SGI版,但vc版的有。

std::map<int, int> mmap;
mmap[] = ;
mmap[] = ;
mmap[] = ;
mmap[] = ; std::map<int, int>:: iterator it = mmap.begin();
for( ; it!=mmap.end(); )
{
if(it->first == )
{
it = mmap.erase(it); // erase的返回值是指向被删除元素的后继元素的迭代器
}
else
{
it++;
}
}

C++ map 使用erase在windows下崩溃,在linux下没有问题的原因的更多相关文章

  1. 解决Windows下文件在Linux下打开出现乱码的问题

    目录 问题 原理 解决 总结 参考资料 问题 前几天生病了,Java一直在看代码但是没跟着打,于是决定偷一波小小的懒,直接把教材的代码从Windows通过共享文件夹放到了Linux里面.但是编译的时候 ...

  2. windows下plsql连接linux下的oracle数据库

    windows下plsql连接linux下的oracle数据库 经过多方查找,终于找到解决办法,特此记录下来,共享之. PL/SQL Develorper:目前未发现可以在Linux系统中安装的版本. ...

  3. windows下mysql和linux下mysql主从配置

    1. linux下mysql安装版本5.6   windows下mysql版本5.7  不要问我为什么版本不一致  就是想这么搞 2. linux为主服务器   windows为从服务器 3.找到li ...

  4. win下gvim或者linux下的vim安装vundle都适用的配置文件 - 在当前目录及其子目录下**, 的所有文件* 中, 搜索当前光标所在的单词

    gvim下的普通配置: if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" set fileencodings=utf-8,g ...

  5. Win10下创建virtualenv Linux下创建

    虚拟环境 为什么要搭建虚拟环境 开发多个不同的项目 可能需要用到同一个包不同版本新版本会覆盖旧的 作用 虚拟环境 可以搭建独立的Python运行环境 使项目之间版本不受影响 Linux下如何搭建虚拟环 ...

  6. linux下安装python linux下一些常用的命令

    注意 ubuntukylin-14.04.2-desktop-amd64 自带python2.7.6 这个说的比较详细 http://wenku.baidu.com/link?url=gaeFcQrc ...

  7. 记录Window系统下myeclipes连接linux下mysql所出现的一个bug

    记录myeclipes远程连接mysql所出现的一个bug 今天在玩框架hibernate时,出现一个非常费解的bug,话不多说,先看bug Access denied for user 'root' ...

  8. 20155202 张旭 课下作业: Linux下IPC机制

    20155202张旭 Linux下IPC机制 IPC机制定义 在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方 ...

  9. 简单通讯聊天 群聊功能 Windows下的客户端 Linux下的epoll服务器

    1 服务器代码  Linux eclipse C++ //======================================================================= ...

随机推荐

  1. windows2012 IIS部署GeoTrust证书踩过的坑。 视频测试可用 IIS 证书导入

    证书导入方式 https://wenku.baidu.com/view/3504f29a55270722192ef78a.html https://www.cnblogs.com/jackrebel/ ...

  2. python守护进程

    1.守护进程 [1]使用runner这个模块直接创建守护进程,非常方便. [2]运行方法:python xxx.py start|stop|restart [3]调用python xxx.py sto ...

  3. Egret飞行模拟-开发记录02

    1.Egret异步加载资源制作loading界面 使用EUI,EXML组件制作loading界面时,需要皮肤主题资源加载控制.即default.thm.json配置文件. 下一篇专门记录这部分. 2. ...

  4. MSVC中C++ UTF8中文编码处理探究

    字符编码的问题,上大学那会儿就遇到过,一直都是云里雾里,没太搞清楚.最近又遇到了问题,想在C++的控制台上输出Utf-8编码的汉字字节流.尝试了好多次都是乱码,后来花了些时间查查资料,又和同事交流了一 ...

  5. 地下产链——创建安装包捆绑软件(Bundled software)

    Bundled_Software 首先,因为个人知识不足的情况下,无法进行EXE文件捆绑机的制作说明,所以有需要请转至http://www.cnblogs.com/qintangtao/archive ...

  6. C语言,链表操作

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string ...

  7. leetcode《按递增顺序显示卡牌》

    题目描述: 牌组中的每张卡牌都对应有一个唯一的整数.你可以按你想要的顺序对这套卡片进行排序. 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态). 现在,重复执行以下步骤,直到显示所有卡牌为止: 从 ...

  8. 人只能靠自己 编写ETL框架使用工具

    今天开始接触到大数据模块,etl 框架工具目的是对医院中的PACS 和RIS 系统进行数据提取: 目前只查到需要用etl工具,大数据板块 ,具体实现仍是大问题 有缘人看到可以留言提示啊:

  9. SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)

    1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的 ...

  10. ThreeJs 模型的缩放、移动、旋转 以及使用鼠标对三维物体的缩放

    首先我们创建一个模型对象 var geometry = new THREE.BoxGeometry( 100, 100, 100); //边长100的正方体 var material = new TH ...