1. map的erase函数使用

这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在。根据参考文献1:

在C++98中:

(1) void erase (iterator position);
(2)size_type erase (const key_type& k);
(3)void erase (iterator first, iterator last);

在C++11中:

(1)iterator  erase (const_iterator position);
(2)size_type erase (const key_type& k);
(3)iterator erase (const_iterator first, const_iterator last);

这直接导致了在使用map类型的容器时,返回值可能不是指向当前删除元素的下一个迭代器的位置。

map<string,string> mapTest;
typedef map<string,string>::iterator ITER; //method 1:使用删除之前的迭代器定位下一个元素。
for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter++);
} //method 2:erase() 成员函数返回下一个元素的迭代器
for(map<string,string>::const_iterator iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
iter=mapTest.erase(iter);
}

因此,method 2适合于C++11标准,而大多数时候,我们目前用的都是C++98标准,应该采用method 1.

2. vector的erase方法

根据文献2,:

c++98和c++11中,vector的erase方法基本上形式是一致的,只不过传入参数的迭代器的形式有所变化,在使用上,都采用类似于上述method 2的方法。

c++98:

iterator erase (iterator position);
iterator erase (iterator first, iterator last);

c++11:

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

这点务必引起注意。

Reference

[1]http://www.cplusplus.com/reference/vector/vector/erase/

[2]http://www.cplusplus.com/reference/map/map/erase/

[3]http://www.cppblog.com/abware/archive/2014/04/22/72459.html

map 和 vector 的erase函数说明的更多相关文章

  1. 【转】vector中erase()的使用注意事项

    vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(   iterator _Whe ...

  2. 在容器中使用erase函数,迭代器的处理

    在c++编程中,用到迭代器的时候,往往不知道如何删除当前迭代器指向的元素. erase函数:   返回下一个迭代器. 只使用vector的erase函数,记住,该函数是迭代器失效,返回下一个迭代器. ...

  3. list map vector set 常用函数列表

    #include <stdio.h> #include <iostream>//cin,cout #include <sstream>//ss transfer. ...

  4. vector list map set等容器某些函数的使用区别

    map, set, vector erase的正确使用方法 一.erase 的用法区别 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不 ...

  5. STL的erase函数和lower_bound

    前提摘要: [1]一般我们的区间是左闭右开,如下面例子2. [2]erase函数谨慎使用. [3]map也是有序保存的. [erase] 1,删除字符串的首字母: string s="ecu ...

  6. 【C/C++开发】STL erase()函数使用要小心

    http://blog.sina.com.cn/s/blog_67b6b720010114d3.html erase()函数的功能是用来删除容器中的元素 删除某个容器里的某个元素:c.erase(T) ...

  7. STL map详细用法和make_pair函数

    今天练习华为上机测试题,遇到了map的用法,看来博客http://blog.csdn.net/sprintfwater/article/details/8765034:感觉很详细,博主的其他内容也值得 ...

  8. 正确使用stl vecotr erase函数

    erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...

  9. C++ - 容器(container)的erase()函数

    容器(container)的erase()函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/23996013 容器(contai ...

随机推荐

  1. MQTT 消息 发布 订阅

    当连接向一个mqtt服务器时,clientId必须是唯一的.设置一样,导致client.setCallback总是走到 connectionLost回调.报connection reset.调查一天才 ...

  2. Android开发笔记之《JNI常用知识汇总》

    参考资料: Android Studio中NDK开发 : http://www.tuicool.com/articles/NBjQnyAndroid Studio使用新的Gradle构建工具配置NDK ...

  3. Python调用服务接口

    #! /usr/bin/env python # coding=utf-8 ############################################################## ...

  4. git版本控制管理实践-4

    vcs: version control system 版本控制系统 local vcs, 集中式版本控制系统: centralized vcs; 分布式vcs: distributed vcs Lo ...

  5. Pandas-多表操作

    Pandas包对多个数据表(DataFrame)的常用整合功能. 目录 merge join concat append combin_first merge 合并 pandas.merge可根据一个 ...

  6. java表格操作之设置表格列宽

    设置所有列的宽度 /** * 设置所有列的列宽 * @param table * @param width */ public void setAllColumnWidth(JTable table, ...

  7. 如何快速正确的安装 Ruby, Rails 运行环境---------------转载

    https://ruby-china.org/wiki/install_ruby_guide  这上面有全部教程, 亲测可用

  8. CentOS6.3安装MongoDB2.2 及 安装PHP的MongoDB客户端

    下载源码:(放到 /usr/local/src 目录下) 到官网 http://www.mongodb.org/downloads 下载源码 https://fastdl.mongodb.org/li ...

  9. SVN版本控制与分支设置

    使用SVN+Eclipse做软件版本控制. (2009年5月) 1,SVN目录结构 Trunk : 主干目录,此目录下的文件为基准文件 Branches : 用于开发的分支目录 Tags : 用于发布 ...

  10. @echo off 与echo off

    echo off 关闭其他命令的显示(但是不包括自身这条命令) @echo off 关闭所有命令的显示(@关闭其后命令的显示)