map 和 vector 的erase函数说明

1. map的erase函数使用

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

在C++98中:

?





1

2

3

4

5

(1) void
erase (iterator position);

(2)size_type erase (const
key_type& k);

(3)void
erase (iterator first, iterator last);

在C++11中:

?





1

2

3

4

5

(1)iterator  erase (const_iterator position);

(2)size_type erase (const
key_type& k);

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

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

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

map<string,string> mapTest;

typedef
map<string,string>::iterator ITER;

//<span style="color: rgb(255, 0, 0);">method 1:使用删除之前的迭代器定位下一个元素。

</span>for(ITER iter=mapTest.begin();iter!=mapTest.end();)

{

cout<<iter->first<<":"<<iter->second<<endl;

mapTest.erase(iter++);

}

<span style="color: rgb(255, 0, 0);">//method 2:erase() 成员函数返回下一个元素的迭代器

</span>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函数说明,布布扣,bubuko.com

时间: 2024-10-10 06:11:48

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

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

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(   iterator _Where); iterator erase(   iterator _First,   iterator _Last); 如果是删除指定位置的元素时: 返回值是一个迭代器,指向删除元素下一个元素; 如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素; 看下面的程序,目的

map中erase函数的使用

STL的map表里有一个erase方法用来从一个map中删除掉指令的节点eg:map<string,string> mapTest;typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key);mapTest.erase(iter); 像上面这样只是删除单个节点,map的形为不会出现任务问题,但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念.像下面这样的一个例子

map, set, vector erase的正确使用方法

map, set, vector erase的正确使用方法 在C++中, 如果我们使用STL,那 如何使用 erase() 来删除 map, set, vector 的所有数据?下面将给出正确的使用方法. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时,需要注意一些问题,以避免引起不可预知错误或崩溃. 在使用 list.set 或 map遍历

C++中erase函数的使用,可以用来删除内存擦除

erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last );也就是说有三种用法:(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符(2)erase(position);删除position处

map,vector,pair记录

vector的练习不是很完整,希望能在处理现实问题的时候能够进行补全,看了一些网络上的东西自己试着写了些 #include<iostream> #include<map> #include<vector> #include<string> #include<algorithm> using namespace std; bool cmp(int a,int b) { return a>b; } int main() { vector<

BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)

2878: [Noi2012]迷失乐园 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special Judge Submit: 319  Solved: 223 [Submit][Status] Description 放假了,小Z认为呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现能够将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m仅仅可能等于n或者n-1). 小Z如今所在的大门也正好

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

容器(container)的erase()函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/23996013 容器(container)的erase()函数, 是删除一个元素, 会移动迭代器的指针, 指向下一个元素; 迭代器(iterator)是一种指针, 赋值是传递的地址, 指向同样的元素; 代码: /* * test.cpp * * Created on: 2014.04.18 * Author: Spike */ /*

map和vector的迭代器失效问题

当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕. 题目: 删除map<int, int>中value为5的倍数的元素. 该题看起来很自然很简单, 实则有迭代器失效的陷阱. 如果对迭代器失效问题一无所知, 则很容易写出如下的错误代码: 1 #include <iostream> 2 #include <map> 3 using namespace std; 4 5 typedef map<int, i

STL map详细用法和make_pair函数

今天练习华为上机测试题,遇到了map的用法,看来博客http://blog.csdn.net/sprintfwater/article/details/8765034:感觉很详细,博主的其他内容也值得学习:后面附上今天的练习题目. 首先make_pair Pairs C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象 class pair可以将两个值视为一个单元.容器类别map和multimap就是使用pairs来管理其健值/实值(key/va lue)的成对元素. pai