首页 > TAG信息列表 > Erase

STL——迭代器删除元素

STL中的容器按存储方式分为两类:一类是序列容器(如:vector,deque),另一类是关联容器(如:list,map,set)。 (1)对于关联容器(如map,set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前的iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入,删除一个结

c++xx 秋招学习STL库 (一)【vector】

c++xx 秋招学习STL库 (一) vector类 主要针对一些编程时使用发现的一些问题与思考进行记录 Vector的初始化 一维数组 //using namespace std; vector<int> int_vec; vector<string> str_vec; //vector<> 二维数组 //两种方法 //方法一: //先设置5行 再动态填充6列 //方法二: //直

删数问题(一个数删去几个位上的数后最小)

https://www.luogu.com.cn/problem/P1106 将字符串中出现递减的数删去(s[i]>s[i+1])此时删去i位置的那个比较大的数 使用erase函数快 循环操作n次结束 #include <bits/stdc++.h> using namespace std; string s; int n, min_idx; char min_first; int main() { cin >> s;

C++迭代器失效的情况与解决方法

在STL中,迭代器失效可发生在三种情况下: 一、数组型数据结构(vector、deque) 对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator或者插入某个iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除或插入一个元素导致后面

Leetcode 1046. 最后一块石头的重量

有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎; 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y

P3987 我永远喜欢珂朵莉~

题面 第一行两个数表示n,m 第二行n个非负整数表示ai 之后m行每行一个操作 1 l r x : 把区间[l,r]中所有x的倍数/x 2 l r : 查询区间[l,r]的和 1 <= n , m <= 100000 0 <= ai <= 500000 1 <= x <= 500000 思路 合理的树状数组优化暴力。 用vector维护余数,然后每次修改都暴力查询,然

【PAT】甲级 A1060 Are They Equal (25 分)

If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10^5 with simple chopping. Now given the number of significant digits on a machine and two float numbers, you ar

ESP32烧录固件,等待上电同步

所用开发板:ESP32 DEVKIT V1 芯片:ESP32-WROOM-32 使用乐鑫ESP32 DOWNLOAD TOOL V3.9.2向ESP32开发板烧录固件时,点击“ERASE”后,显示“等待上电同步”,这时按开发板上的“BOOT”按钮1秒左右即可; ERASE完成后,点击“START”,再次出现“等待上电同步”,同样按开发板上的“BOOT”按钮1

关于vector遍历erase的方法记录

vector  std::vector<int> data;     for(int i = 0;i<10;i++){         data.push_back(i);     }     for(std::vector<int>::iterator it = data.begin();it!=data.end();)     {         if(1 == *it)         {             it =

[STL]set常见用法详解

目录 引入 常见用法介绍 1. set的定义 2. set容器内元素的访问 3. set常用函数解析 1)insert() 2)find() 3)erase() 4)size() 5)clear() 常见用途 延伸 引入 set翻译为集合,是一个内部有序且不含重复元素的容器。在考试中,有可能出现需要去掉重复元素的情况,而元素过大或元素类型不是in

STM32(八)W25Q(16/32/64/128)芯片学习总结

系列文章目录 文章目录 系列文章目录前言一、硬件和数据手册部分翻译1.W25Q64硬件设计2.数据手册解读 二、指令 前言 按项目需求,近期调试了W25Q32芯片,W25Q系列芯片是华邦公司推出的大容量SPI FLASH产品,W25Q32是3V,32M-bit 串行闪存,具有双通道和四通道的SPI。 初始使用了

图文介绍STM32L4读写内部flash

型号:STM32L431KBU6; 该型号内存 = 128KB,起始地址 = 0x0800_0000;只有63页;  在L4的user manual手册的第三章详细介绍了FLASH的操作细节,我挑一些重要的信息; flash擦除方式有两种: 1、Page erase—以页位单位擦除,1页=2K,每次最少擦除1页; 2、Mass erase—擦除整个flash; 比较重要的信

cpp中vector的使用

vector的使用 创建 vector<int> a; 增 a.push_back(3); a.insert(a.begin(), 4); a.insert(a.begin()+1, 5); 删 erase一个迭代器,然后删除之,pop_back是删除最后一个元素,clear直接清空所有。 a.erase(a.begin()); a.pop_back(); a.clear(); 改 直接下标修改

有关(unordered_)map::erase的奇怪bug

背景 项目中使用unordered_map保存方便使用key快速索引对象 需要每次使用后根据key判断是否删除过期pair代码如下: for(auto& pair : m) { if(!condition(pair.first)) { m.erase(pair.first); } } 捉虫 开始代码跑起来没问题,不久出现端倪偶发报错 打断点

(一)随记-STL

  一、树 (1)BST-二叉查找树、二叉排序树;     左子树所有结点的值均小于或等于它根结点的值;右子树上所有结点的值均大于或等于它根结点的值; (2)RBT-红黑树、平衡二叉查找树;     防止二叉查找树变成线性, (2)AVL-平衡二叉树:任何结点的两个子树高度差不会超过1;     根据平衡因子做

【CF1398】E. Two Types of Spells(set)

题目链接:https://codeforces.com/problemset/problem/1398/E 分析 不难发现,每次我们要让能被双倍使用的咒语尽量大,能被双倍使用的咒语数量就是1类咒语的数量。而能被双倍使用的咒语即是除了第一次使用的1类咒语外的所有咒语。 根据贪心的思想,第一次使用的1类咒语肯定是1类咒

在开源项目或项目中使用git建立fork仓库

前言: vector我们经常使用,对vector里面的基本函数构造函数、增加函数、删除函数、遍历函数我们也会用到。其中在使用遍历之后erase删除元素过程中,会出现一种删除最后一个元素破坏了迭代器的情况。 如下所示 删除到最后一个元素的时候就会报错 vector<int> data(10); auto temp_beg

别被vector最后一个元素erase错误

​  ​ 前言: vector我们经常使用,对vector里面的基本函数构造函数、增加函数、删除函数、遍历函数我们也会用到。其中在使用遍历之后erase删除元素过程中,会出现一种删除最后一个元素破坏了迭代器的情况。 如下所示 删除到最后一个元素的时候就会报错 vector<int> data(10); auto

L1-017 到底有多二 (15 point(s))

cnt 写的时候又忘记初始化了,所以又记一次,不需要 cin 输入读取的变量一概都需要初始化。 erase() 忘记怎么写了,开始还以为是 erase('-') 但报了一个异常。 所以看了别人的说明,发现 erase() 函数对 string 来说有两种使用方式,一个是传入一个指向删除元素的迭代器,第二个是指定删

Apollo3 Plue MCU的Internal Flash上尝试用FATFS失败

客户提供的MSPI读写External FLash的代码有问题,想着设备上的Internal Flash可以使用。 就想用Internal Flash做个FATFS试试。奇怪的是数据写入后,读出来来什么都没写上。 不清楚是写的问题,还是读的问题。经过调查,现在问题可能在下面几个地方: 1.Internal Flash 写之前必须Erase,否则

字符串/map/set的操作

截取其中一段字符串 str.substr(i,j-i); //长度是j-i unordered_set s; s.insert(d); s.erase(d); s.count(d) s.find(d) ==s.end() unordered_map<int,int> 根据value 寻找key auto pos = hash.find(target - num); if (pos == hash.end()) { hash[num] = i; map.insert(make

1、迭代器失效

一、迭代器   迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。如下图所示:

C++STL(set……)

set 底层实现是用红黑树。 set 建立 set<int> s; // 不可重,默认升序 set<int,less> s; // 不可重,升序 set<int,greater> s; // 不可重,降序 multiset<int> s; // 可重集 set 也可以重载,利用结构体实现。 重载方式同 priority_queue 。 set 插入及访问 set<int>::iterator it; s.in

贪心-P1106删数问题题解

题目描述 键盘输入一个高精度的正整数 NN(不超过 250250 位),去掉其中任意 kk 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 NN 和 kk,寻找一种方案使得剩下的数字组成的新数最小。 输入格式 n(高精度的正整数 )。 k(需要删除的数字个数 )。 输出格式 最后

【c++】C++中erase的用法

erase一共三种用法:1.erase(pos,n);删除从下标pos开始的n个字符,比如erase(0,1)就是删除第一个字符2.erase(position);删除postion处的一个字符(position是一个string类型的迭代器)3.erase(first,last)删除从first到last之间的字符(first和last都是迭代器)