c++ map,mutimap删除问题分析
这样删除会导致程序内存覆盖等一系列不可预知的bug
代码如下:
map<string, string>::iterator iter;
for ( iter = mm.begin();iter != mm.end(); iter ++ )
{
if ( iter->second == something )
{
mm.erase( iter );
}
}
原因:当erase掉iter后,继续执行iter++,这个时候就乱套了
正确方法:
代码如下:
for (iter = mm.begin();iter != mm.end();)
{
if ( iter->second == something )
{
mm.erase( iter++ );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}
可能有人不理解mm.erase(iter++)
其实和这个是一样的
代码如下:
for (iter = mm.begin();iter != mm.end();)
{
if ( iter->second == something )
{
map<string, string>::iterator iter_erase;
iter_erase = iter++ //先保存后++再删除
mm.erase( iter_erase );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}
相关推荐
-
C++中vector和map的删除方法(推荐)
1.连续内存序列容器(vector,string,deque) 序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素. vector<int> c; for(vector<int>::iterator it = c.begin(); it != c.end();) { if(need_delete()) it = c.erase(it); else ++it; } 2.关联容器(set,multiset,map,multima
-
C++如何删除map容器中指定值的元素详解
前言 大家都知道map容器是C++ STL中的重要一员,平时会遇到删除map容器中value为指定元素的问题,例如删除所有字符串为"123"或者能整除3的元素. 一.map容器下的方法说明 由于map容器下的方法较多,这里只列举代码中用到的几个方法: insert()方法: //插入val到pos的后面,然后返回一个指向这个元素的迭代器 iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &v
-
浅谈c++ vector和map的遍历和删除对象
示例如下: // Aa.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <vector> #include <map> #include <iostream> using namespace std; int main(int argc, char* argv[]) { printf("Hello World!\n
-
c++ map,mutimap删除问题分析
这样删除会导致程序内存覆盖等一系列不可预知的bug 复制代码 代码如下: map<string, string>::iterator iter; for ( iter = mm.begin();iter != mm.end(); iter ++ ) { if ( iter->second == something ) { mm.erase( iter ); } } 原因:当erase掉iter后,继续执行iter++,这个时候就乱套了 正确方法: 复制代码 代码如下: for (iter
-
go语言map字典删除操作的方法
本文实例讲述了go语言map字典删除操作的方法.分享给大家供大家参考.具体分析如下: 这里先构造了一点map,添加了青岛.济南.烟台三地的拼音和汉字字典,然后删除青岛,最后查看青岛是否还存在 复制代码 代码如下: package main import "fmt" func main(){ var pc map[string] string pc = make(map[string] string) pc["qingdao"] = "
-
vector list map 遍历删除制定元素 防止迭代器失效的实例
方法如下所示: // k_control.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "stdio.h" #include <vector> #include <map> #include <string> #include <list> using namespace std; int _tmain(int argc, _TCHAR* argv[]) {
-
Android Map数据结构全面总结分析
目录 前言 Map ArrayMap TreeMap HashMap 总结 前言 上一篇讲了Collection.Queue和Deque.List或Set,没看的朋友可以去简单看看,这一篇主要讲和Map相关的数据结构. Map 上篇有介绍过,Map是另一种数据结构,它独立于Collection,它的是一个接口,它的抽象实现是AbstractMap,它内部是会通过Set来实现迭代器 Set<Map.Entry<K, V>> entrySet(); 是和Set有关联的,思想上主要以ke
-
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
本文实例讲述了JS常见疑难点分析之match,charAt,charCodeAt,map,search用法.分享给大家供大家参考,具体如下: JavaScript match() 方法 定义和用法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. 该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置. 语法 匹配字符串,返回指定的值 stringObject.match(searchvalue) 匹配正则,返回指定
-
Go语言map字典用法实例分析
本文实例讲述了Go语言map字典用法.分享给大家供大家参考.具体分析如下: 这段代码生成了青岛.济南.烟台三个城市拼音和汉字的对照字典,根据拼音可以输出汉字 复制代码 代码如下: package main import "fmt" func main(){ var pc map[string] string pc = make(map[string] string) pc["qingdao"] = "青岛" pc["jinan&
-
ES6新特性五:Set与Map的数据结构实例分析
本文实例讲述了ES6新特性五之Set与Map的数据结构.分享给大家供大家参考,具体如下: 1. Set ① 定义:它类似于数组,但是成员的值都是唯一的,没有重复的值.Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2,3,5,4,5,2,2].map(x => s.add(x)) console.log(s); //Set { 2, 3, 5, 4 } ② 属性和方法 Set结构有以下属性. Set.prototype.constructor:构造函数
-
关于java中Map的九大问题分析
通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的.下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题. 0.将Map转换为List类型 在java中Map接口提供了三种集合获取方式:Key set,,value set, and key-value set..它们都可以通过构造方法或者addAll()方法来转换为List类型.下面代码就说明了如何从Map中构造ArrayList: // key list List keyList = new ArrayLi
-
asp操作access提示无法从指定的数据表中删除原因分析及解决
数据库访问权限问题 右击数据库文件->属性->安全->添加->高级->立即查找->IUSR_XXXX & IWAN_XXXX ->确定->打开两个用户的"写入"和"修改"的权限 注意:XXXX为你的计算机名 如果操作系统用的是XP,则需要在 工具->文件夹选项->视图 中关闭"简单文件共享" 是windows本身对IUSER用户的权限问题,尤其是2000以上NTFS格式的硬盘默认
随机推荐
- JSON与XML优缺点对比分析
- Spring的连接数据库以及JDBC模板(实例讲解)
- jquery下jstree简单应用 - v1.0
- 详解Spring Security如何配置JSON登录
- python定时器(Timer)用法简单实例
- asp.net(C#)操作excel(上路篇)
- 用asp获取微软安全更新列表的代码 小偷程序
- 简要说明C语言中指针函数与函数指针的区别
- PHP 引用文件技巧
- javascript布局查看器效果代码
- Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
- php实现网站插件机制的方法
- window.onload和$(function(){})的区别介绍
- 用javascript和css模拟select的脚本
- 修改Windows 2003机器名
- C#使用foreach语句遍历集合类型的方法
- Android用PopupWindow实现自定义Dailog
- C++实例输入多行数字到数组
- AngularJS实现图片上传和预览功能的方法分析
- PHP基于phpqrcode类生成二维码的方法详解