map 和 vector 的erase函数说明
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函数说明的更多相关文章
- 【转】vector中erase()的使用注意事项
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase( iterator _Whe ...
- 在容器中使用erase函数,迭代器的处理
在c++编程中,用到迭代器的时候,往往不知道如何删除当前迭代器指向的元素. erase函数: 返回下一个迭代器. 只使用vector的erase函数,记住,该函数是迭代器失效,返回下一个迭代器. ...
- list map vector set 常用函数列表
#include <stdio.h> #include <iostream>//cin,cout #include <sstream>//ss transfer. ...
- vector list map set等容器某些函数的使用区别
map, set, vector erase的正确使用方法 一.erase 的用法区别 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不 ...
- STL的erase函数和lower_bound
前提摘要: [1]一般我们的区间是左闭右开,如下面例子2. [2]erase函数谨慎使用. [3]map也是有序保存的. [erase] 1,删除字符串的首字母: string s="ecu ...
- 【C/C++开发】STL erase()函数使用要小心
http://blog.sina.com.cn/s/blog_67b6b720010114d3.html erase()函数的功能是用来删除容器中的元素 删除某个容器里的某个元素:c.erase(T) ...
- STL map详细用法和make_pair函数
今天练习华为上机测试题,遇到了map的用法,看来博客http://blog.csdn.net/sprintfwater/article/details/8765034:感觉很详细,博主的其他内容也值得 ...
- 正确使用stl vecotr erase函数
erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...
- C++ - 容器(container)的erase()函数
容器(container)的erase()函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/23996013 容器(contai ...
随机推荐
- windows下cmd记录MYSQL操作
我们在cmd下操作MYSQL,当需要复制某条命令的时候,需要右键标记,然后选取,然后......各种不方便! 有没有比较方便的方式,可以将我们的操作记录自动的实时保存下来,当我们需要操作的时候,可以高 ...
- [转载]java int与integer的区别
声明: 本篇文章属于转载文章,来源:
- js 日期时间排序 数组
不多说直接show代码 var timeArr=[ {'id':'A01','date':'2016-04-20 23:22:11'}, {'id':'A02','date':'2016-04-21 ...
- oracle---触发器总结
一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- C C++ 语法
非常酷的网站: http://yige.org/cpp/defined_data_types.php 在Linux下有一个目录/proc/$(pid),这个目录保存了进程号为pid的进程运行时的所有信 ...
- java读取项目根路径下和任意磁盘位置下的properties文件
1.读取项目根路径下的properties文件比较简单也是比较常见的一种操作. 具体代码如下: package com.xuanen.util; import java.util.Properties ...
- 如何对Azure磁盘性能进行测试
Azure的云存储一直是Azure比较自豪的东西,想到AWS的LSA后面有若干个9,搞得大家都以为它的存储最优秀,其实不然,Azure存储到现在没有丢过客户1bit的数据,但是Azure不会去说我们的 ...
- 02第一个OC程序
一.打开XCode4.6.3,新建项目 二.选择Application下的命名行项目 三.输入项目名称,选择Foundation框架创建项目,点击Next 四.二话不说.点击Run.启动我们创建的项目 ...
- C/C++ 笔试题
/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...
- Java中的BoneCP数据库连接池用法
http://zhoufoxcn.blog.51cto.com/792419/438277/ C3P0,Proxool,BoneCP,Druid