stl list erase
典型错误
1
2
3
for(list::iterator it=li.begin();it!=li.end();it++){
li.erase(it);
}
问题:该程序不能跳出循环
原因:li.erase(it);每次做erase时都有可能使迭代器失效,it++就发生错误了。可以参见effective stl一书。所有容器做erase操作时都有可能使迭代器失效。
因为,当list执行erase函数后,会删除对应it的元素,这时迭代器it自动更新为下一个元素的地址(下一个指删除元素的下一个)。这时再执行it++,就会把
迭代器it指向删除元素的下下个,导致最终失效,因为跳过一个元素。
正确写法有:
1
2
3
4
5
6
7
8
9
10
while{ it!= li.end(); ){
if (*it % 2)
{
li.erase(it++); //在删除it还在时,对其++
}
else
{
it++;
}
}
或者:
复制代码
while{ it!= li.end(); ){
if (*it % 2)
{
it=li.erase(it); //erase函数返回值为删除元素的下一个元素的迭代器(其实就是一个指针),把它赋值给it,就相当于++了。我更喜欢第一种写法。
}
else
{
it++;
}
}
复制代码
stl list erase相关推荐
- STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...
- STL的erase()陷阱-迭代器失效总结
下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...
- STL中erase()的用法
erase()是STL提供的容器中比较常用的方法之一,它的功能是删除容器中的某些元素,其中它的函数原型如下: 1.有两个参数,且参数类型都是size_t型: string& erase ( s ...
- 正确使用stl vecotr erase函数
erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...
- STL: string:erase
leetcode: permutation sequence 用了https://github.com/soulmachine/leetcode上面康托编码的思路: class Solution { ...
- vector erase() and clear() in C++ -- vector的函数erase()和clear()
Vectors are same as dynamic arrays with the ability to resize itself automatically when an element i ...
- c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- STL的一些常用的用法(转)
toupper,tolower 地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法: string s("heLLo"); ...
- C++接收字符串数组_C++模拟面试:从数组“紧凑”操作说开来
面试官 自来也 去掉一个字符串中的空格. 假设用C语言来解答,字符串是char数组.O(n)时间复杂度实现不难,比如额外申请一个新数组,然后遍历一遍字符串,将符合条件的字符存储到新数组中,实现起来很简 ...
最新文章
- LeetCode实战:反转链表
- Serverless 在大厂都怎么用?
- 做一个略调皮的个人主页--相册与随笔篇
- Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上)
- 加号和减号在一起怎么读_孩子粗心大意怎么治?告诉你背后的原因和好用的方法.........
- 【常用】2DUI跟随3D物体移动(待修复)
- [蓝桥杯][算法训练VIP]乘积最大(动态规划)
- linux系统访问文件夹ls,Linux系统目录结构,文件类型以及ls、alias命令
- Modbus协议概念最详细介绍
- 华硕主板如何u盘启动电脑
- oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线
- [Teamcenter 2007 开发实战] 获取错误或提示信息
- MIT 6.828 main.c文件分析
- GEF:使用Draw2D画流程图-(下)
- 分布式文件存储-FastDFS原理简介
- Ubuntu联网图标消失
- Python量化数据获取:总资产同比增长率与净资产同比增长率
- 请问悉尼大学计算机专业,悉尼大学计算机专业去留学怎么样 是强势专业吗?...
- beyond-compare 命令行工具
- 【PTA-python】第7章-1 词频统计 (30 分)--sys.stdin.read()读入到特定字符截至,双重排序条件key=lambda item:(-item[1], item[0])