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

set的erase()函数 1.删除单个元素 #include<iostream> #include<set> using namespace std; int main() { set<int>st; for(int i=1;i<=3;i++) st.insert(i); st.erase(st.find(2));//删除元素2 //此处直接st.erase(2)也可以... 阅读详情

点击打开链接



在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++;
      }



看下能不能返回迭代器。

实测set也可以用方法2


std::find操作与stl中find成员函数的区别 这会消耗 O(n) 的时间(其中 n 是被删除元素后面的元素数量)。为了避免这个问题,你可能需要采用不同的策略,例如使用一个额外的数据结构来跟踪哪些元素被删除。在vector中用erase(),推荐用下面的写法:(find找到与nums[i]相等的第一个元素就会返回,不一定是nums[i]本身)此外,当修改 vector 的大小(例如通过调用 erase)时,需要特别注意不能超出其边界。中查找键值为 3 的元素,如果找到,我们打印出该键值。中查找值为 3 的元素,如果找到,我们打印出该元素。 阅读详情

相关推荐

【C++标准模板库】一些函数的用法(vector、set、map)

变长数组”,相当于一维数组,长度根据需要而自动改变的数组。(大部分STL都是这样定义)在头文件下方要添加(都要加)typename也是一个STL容器,可以是任何的基本类型。1、在vector后面加上一个元素x,时间复杂度:O(1);2、删除vector的尾元素,时间复杂度:O(1);1、,vector本身可以作为数组使用,在一些元素个数不确定的场合可以很好的节省空间。有些场合需要根据一些条件把部分数据输出在同一行,数据中间用空格隔开。

qq_50563459的博客 1492

vector、list、map、set中的erase用法

(1)list与vector     list与vector中的erase用法相同,它们的 erase 函数会返回指向下一个元素的迭代器,因此在遍历时,只需要 it = c.erase(it); 即可。如示例代码: vector&lt;int&gt;::iterator it = vec.begin();   for (; it != vec.end();)   {       if (*i...

zhaojunwuiris的博客 2261

第七章 Wi-Fi连接过程

系列文章目录 第一章 国内下载AOSP最新源码的方法 第二章 下载AOSP WiFi相关的代码 第三章 将源码导入Android Studio(无需编译idegen) 文章目录系列文章目录前言一、Wi-Fi连接是什么?二、Wi-Fi连接的过程1. 手动连接总结 前言 Wi-Fi连接分为下面几种过程,每种的流程都有些许差异: 手动连接 自动连接 在BSS之间漫游 Passpoint热点连接 一、Wi-Fi连接是什么? Wi-Fi连接是指STA(手机)连接到AP(无线路由器)的过程,这个过程分为链路

Frank.Zhang的专栏 2525

无涯教程-C++ Set - Erase函数

C++ set函数用于从set集合中删除与给定键关联的单个元素或元素参数([first,last))。因此,将通过删除元素的数量来减小尺寸。

无涯教程 1721

FMC/FSMC/EXMC总线NORFlash/PSRAM接口(异步-复用-不突发/同步-复用-突发)

目录 1 简介 1.1 框图 1.2 接口定义 1.3 读写时序图、时序配置参数 1.4 PSRAM控制器异步工作模式分类 1.5 PSRAM寄存器配置 1.5.1 控制寄存器BCR 1.5.2 片选时序寄存器BTR 1.5.3 写入时序寄存器BWTR 2 FPGA接口设计 2.1 实际配置的时序 2.2 接口信号处理 3 参考文献 1 简介 使...

leixj的博客 2万+

【Azure 架构师学习笔记】- Azure Private Endpoint

公有云的其中一个特点是默认允许公网访问, 这就对企业环境带来风险,也是很多年前企业对公有云抵触的其中一个原因,现在这类问题已经很少,因为有了很多技术来确保云上的资源被安全地访问。其中Private endpoint(PE)就起到了很重要的作用。云上的某个资源如VM会创建在特定的网络(VNet/Subnet)上, 而其他如Storage Account , Azure SQL等PaaS服务则没有。如果你需要用VM 来访问这些PaaS资源,VM 就会通过资源的公网IP 来访问。

MVP黄钊吉(發糞塗牆) 1786

如何运用C++ set 附例题(set中erase函数、iterator迭代器)

set在解决算法题上是十分实用的!

Zhengyangxinn的博客 2503

从零开始:小鼠Bulk RNA-seq全流程实战指南

本文提供了一份详尽的小鼠Bulk RNA-seq全流程实战指南,涵盖从软件环境搭建、原始数据质控与清洗、序列比对、基因定量到下游差异表达分析与功能富集。内容面向生物信息学新手,通过清晰的代码示例和步骤解析,帮助读者系统掌握Bulk RNA-seq数据分析的核心技能,并产出可靠的生物学洞见。

lake5的博客 712

set的find函数,erase函数,auto关键字的使用, to_string函数,stoi函数,单调递减栈, set的 insert.second--LeetCode笔记2

set的find函数,返回一个指向被查找到元素的迭代器,,如果没找到,返回的是set.end()

JiWei0811的博客 1831

2023华为od机试C卷【最富裕的小家庭】Java&Go 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1902

【SpringBoot 3.x 第92节】Spring Modulith:构建模块化单体架构(基于 Spring Boot 3),一文带你搞透(超详细)!

🏆本文收录于《滚雪球学SpringBoot 3.x》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    该专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 995

STL erase函数的使用陷阱总结大全

阅读目录(Content) 1.list,set,map容器 1.1 正确写法1 1.2 正确写法2 1.3 错误写法1 1.4 错误写法2 1.5 分析 2. vector,deque容器 2.1 正确写法 2.2 注意 3.迭代器失效的情况 3.1 vector 3.2 deque 3.3 list 3.4 slist 3.5 stack 3.6 queue 3.7 priority_queue 3.8 set 3.9 multiset 3.10 hash_set 3.11 hash_multiset

excelNo1的博客 496

图像紫边消除(depurple)

对图像紫边形成原因、消除方法进行了介绍。

沧海一升的博客 7564

C++容器操作方法总结 (持续更新中)

对于野路子来说实在不友好,我每学到容器的操作就在此记录一下.

m0_73687800的博客 530

【100%通过率】华为OD机试真题 Python 实现【最多组合直角三角形个数】【2023 Q1 | 100分】

有N条线段,长度分别为a[1]-a[n]。 现要求你计算这N条线段最多可以组合成几个直角三角形。 每条线段只能使用一次,每个三角形包含三条线段。

MISAYAONE的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++笔试题常用STL以及其他小操作使用汇总

字符串stringsubstr操作:string s("lewis"); //返回一个string 包含s中从pos开始的n个字符的拷贝 默认0-s.size() s.substr(pos,n);改变string的方法:string s("lewis"); s.insert(pos,args); //在pos之前插入 注意这里pos使用下标,使用迭代器会报错。 s.erase(pos,len); ...

斯斯的博客 699

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++浅谈STL容器迭代器失效

参考:https://blog.youkuaiyun.com/wangshihui512/article/details/9791517 https://blog.youkuaiyun.com/petersmart123/article/details/53304437   序列性容器::(vector和list和deque)          erase迭代器不仅使所指向被删元素的迭代器失效,而且使被删元素之后的...

SanfordZhu的博客 1382

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++中的STL

C++中STL的使用

luozhengxxf的专栏 120

STL容器删除迭代器问题分析

删除容器迭代器是一个需要斟酌的动作,务必谨慎否则会带来意想不到的危险,下我们就一起分析分析两大类容器删除迭代器的正确开启方法: 转载于:添加链接描述 导致迭代器失效的原因一般有两种: 1、迭代器对象已经变成了“野指针”,对其进行*,++,–都会引起程序内存操作异常。 2、迭代器对象所指向的内容已经不是所期望的内容,也被称为迭代器失效。 顺序容器(如:vector,string,deque和list) 关联容器(如:set,map) 两种容器在使用erase()函数时是有不同的。 1.顺序容器的erase函数

qq_43525260的博客 509

erase方法的正确使用

STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。当运用到STL中的函数的时候,在使用erase方法来删除元素时,需要注意一些问题(本人还没有彻底的理解到其出现问题的原因,等我学会了其容器的储存形式之后,再回过头来解释其原因,以下的内容仅是阅读笔记)。 当你想遍历删除一个容器

yzl_rex 3590

vector/list/map/set的插入、删除、遍历 - remove\erase函数

1、vector中删除满足某些条件的元素和迭代器失效问题#include <iostream> #include <vector> using namespace std; int main() { std::vector<int> mVector; mVector.push_back(1); //插入元素push_back mVector.push_back(2);

GoJawee的博客 1507

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

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

diaokua8472的博客 141

c++ STL vector,list,map的erase用法

vector,内存连续分布,调用erase之后,后面的元素会向前移,导致后面的迭代器全部失效。 正确写法 类似的还有dquue std::vector<int> vec_test; vec_test.push_back(1); vec_test.push_back(2); vec_test.push_back(3); for(std::ve...

zqw_4181的博客 484

C++ STL之容器介绍(vector、list、set、map)

STL(Standard Template Library)即标准模板库。STL通过使用模板实现了容器和算法的分离,允许程序员编写与类型无关的代码,这正是泛型编程的核心思想。

new9232的博客 1600

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

http://blog.sina.com.cn/s/blog_508938e10101gnw0.html 在C++中, 如果我们使用STL,那 如何使用 erase() 来删除 map, set, vector 的所有数据?下面将给出正确的使用方法。 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque); 另一类是以不连续的节点形式存储的容器(如:lis...

is Mr.Chen的博客 197

总结一下erase函数

erase :从指定容器删除指定位置的元素或某段范围内的元素 如下: iterator erase(iterator_Where); iterator erase(iterator_First,iterator_Last); 1.对于关联容器,如map,set(以及multi类型)等,erase当前的迭代器iterator,仅仅会使当前的iterator失效,并不影响以后的内容(不会自动指向下一个节点的迭代器),所以只要在进行删除前,预先保留下一个当前迭代器的递增值即可。这是因为关联...

lightyoung的博客 1699
上一篇: 2017 CCPC 秦皇岛 & ZOJ 3993 - Safest Buildings (概率+规律)
下一篇: Codeforces Round #451 (Div. 2) - E. Squares and not squares (贪心)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值