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

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

在C++中, 如果我们使用STL,那 如何使用 erase() 来删除 map, set, vector 的所有数据?下面将给出正确的使用方法。

STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque); 另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题,以避免引起不可预知错误或崩溃。

在使用 list、set 或 map遍历删除某些元素时可以这样使用
      std::list< int> List;
      std::list< int>::iterator itList;
      for( itList = List.begin(); itList != List.end(); )
      {
            if( FIND( *itList) )
            {
               List.erase( itList++);
            }
            else
               itList++;
      }

在使用 vector、deque遍历删除元素时,也可以通过erase的返回值来获取下一个元素的位置:
      std::vector< int> Vec;
      std::vector< int>::iterator itVec;
      for( itVec = Vec.begin(); itVec != Vec.end(); )
      {
            if( FIND( *itVec) )
            {
                 itVec = Vec.erase( itVec);
            }
            else
               itList++;
      }

时间: 2024-10-16 12:45:18

map, set, vector erase的正确使用方法的相关文章

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 

3.1.3 STL中list、map、vector的使用方法

(一)list的使用方法: 代码: #include <iostream> #include <list> #include <algorithm> #include <numeric> #include <iterator> using namespace std; typedef list<int> LISTINT; typedef list<char> LISTCHAR; int main() { LISTINT l

map/vector erase

问题核心:erase之后迭代器是否失效 vector调用erase之后,该迭代器之后的迭代器都失效: map调用erase之后,其他迭代器并不会失效. 1 vector<int> vecData; 2 for (typeof(vecData.begin()) it; it != vecData.end();) 3 { 4 if (*it == 1) 5 { 6 it = vecData.erase(it); 7 //vv.erase(it++); //vector erase之后,it迭代器后

C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法

C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法. C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换. 1.std::vector::erase() 函数原型:iterator erase (iterator position); //删除指定元素 iterator erase (iterator first, iterator last); //删除指定范围内的元素 返回值:指向删除元素(或

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<

Stl——Vector.erase()用法

今天用上了Vector.erase()方法,发现很多鬼畜.后来查资料才发现,erase()是删除当前迭代器返回下一个迭代器.如果你仅仅是使用了erase但是没有更新遍历的迭代器就会导致当前迭代器被释放成野指针,成为野指针后再使用++ -- 的操作肯定会出问题.于是你需要将迭代器更新,即iter = myVec.erase():更新之后,iter已经指向了删除元素的下一位.此时跳出判断,又回到了for循环,for循环中iter又++了一次,这样就使得后面一个元素被跳过了.所以,在使用iter =

SQL Server附加数据库出现错误5123的正确解决方法

SQL Server附加数据库出现错误5123的正确解决方法 因为自己有一本基于SQL Server 2005的数据库教程,里边使用的示例数据库是AdventureWorks for SQL Server 2005,而我的机子上装的是SQL Server 2008,示例数据库是AdventureWorks for SQL Server 2008.起初我以为示例数据库AdventureWorks for SQL Server 2005 与AdventureWorks for SQL Server

AspectJ学习笔记2-Eclipse中AspectJ插件AJDT的正确安装方法

接着之前一篇日志.这个事情也挺无语的,简单记录一下. 在这里:http://www.eclipse.org/ajdt/ 可以下载最新的Eclipse Plugin,下载解压之后,一般来说,直接把解压后文件夹下的features和plugins放到Eclipse的文件夹下就行了.不过我这样做以后,启动Eclipse,发现没什么作用.才参考网上有人介绍的第二种方法,也就是Help--Install New Software--Add--Local这种方式选择刚才的解压文件夹,但是这样操作以后会报像下

JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中,也是能看到他的,所以还是非常值得去学习的一个知识点的,我们直接开车了 一.Map概述 泛型< k,v> 键值对,映射关系 基本特点 该集合存储键值对,是一对一对往里存,而且要保证键的唯一性 1.添加 put(key ,values) putAll() 2.删除 clear() remove(ob