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. Finite State Machine 是什么?

    状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动       作.完成特定操作的控制中心. 类 ...

  2. spring-事务管理

    一个数据库事务是一个被视为单一的工作单元的操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性.事务的概念可以描述为 ...

  3. [HAOI2009]求回文串

    神奇到爆炸的贪心,策略很简单.但是实现上好像比较恶心.换了一种思路.先保存所有点应该转移到的位置,BIT搞个逆序对就好了. 如何找到每个点应该转移到的位置?这个处理方式也是比较玄学.看代码吧. //O ...

  4. Python Day4

    一.装饰器 装饰器类似于一种动态增加函数功能的方法,使用@语法,放在它要装饰的函数定义处(函数定义的上面),实现为已经存在的函数增加新的功能. def outer(func): def innter( ...

  5. Java的生日

    你知道巴西的税务系统,亚马逊的Kindle阅读器以及韩国的第一大镁板制造厂有什么共同点吗?乍一看上去,这简直就是风马牛不相及,但是这些系统同世界上其它100亿个设备共享一个元素,那就是Java. 19 ...

  6. 10月28日上午 PHP数据访问

    1.建一个连接(连接PHP和MYSQL) $db = new MySQLi("localhost","root","666","t ...

  7. ANDROID_HOME on Mac OS X

    Where the Android-SDK is installed depends on how you installed it. If you downloaded the SDK throug ...

  8. @RequestMapping 用法详解之地址映射(转)

    引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为applicatio ...

  9. 几款开源ESB总线的比较

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  10. ubuntu下安装mysql及卸载mysql方法

    1. 删除mysql a. sudo apt-get autoremove --purge mysql-server-5.0 b. sudo apt-get remove mysql-server c ...