典型错误

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相关推荐

  1. STL中用erase()方法遍历删除元素

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...

  2. STL的erase()陷阱-迭代器失效总结

    下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...

  3. STL中erase()的用法

    erase()是STL提供的容器中比较常用的方法之一,它的功能是删除容器中的某些元素,其中它的函数原型如下: 1.有两个参数,且参数类型都是size_t型: string& erase ( s ...

  4. 正确使用stl vecotr erase函数

    erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...

  5. STL: string:erase

    leetcode: permutation sequence 用了https://github.com/soulmachine/leetcode上面康托编码的思路: class Solution { ...

  6. 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 ...

  7. c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  8. STL的一些常用的用法(转)

    toupper,tolower 地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法: string s("heLLo"); ...

  9. C++接收字符串数组_C++模拟面试:从数组“紧凑”操作说开来

    面试官 自来也 去掉一个字符串中的空格. 假设用C语言来解答,字符串是char数组.O(n)时间复杂度实现不难,比如额外申请一个新数组,然后遍历一遍字符串,将符合条件的字符存储到新数组中,实现起来很简 ...

最新文章

  1. LeetCode实战:反转链表
  2. Serverless 在大厂都怎么用?
  3. 做一个略调皮的个人主页--相册与随笔篇
  4. Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上)
  5. 加号和减号在一起怎么读_孩子粗心大意怎么治?告诉你背后的原因和好用的方法.........
  6. 【常用】2DUI跟随3D物体移动(待修复)
  7. [蓝桥杯][算法训练VIP]乘积最大(动态规划)
  8. linux系统访问文件夹ls,Linux系统目录结构,文件类型以及ls、alias命令
  9. Modbus协议概念最详细介绍
  10. 华硕主板如何u盘启动电脑
  11. oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线
  12. [Teamcenter 2007 开发实战] 获取错误或提示信息
  13. MIT 6.828 main.c文件分析
  14. GEF:使用Draw2D画流程图-(下)
  15. 分布式文件存储-FastDFS原理简介
  16. Ubuntu联网图标消失
  17. Python量化数据获取:总资产同比增长率与净资产同比增长率
  18. 请问悉尼大学计算机专业,悉尼大学计算机专业去留学怎么样 是强势专业吗?...
  19. beyond-compare 命令行工具
  20. 【PTA-python】第7章-1 词频统计 (30 分)--sys.stdin.read()读入到特定字符截至,双重排序条件key=lambda item:(-item[1], item[0])

热门文章

  1. 戴尔U盘重装系统Win10步骤和详细教程
  2. idea创建maven空项目注意事项
  3. 安卓模拟器Android SDK安装完整图文教程
  4. 相似度算法——Levenshtein(编辑距离)
  5. B. Lunatic Never Content - 数论
  6. 论文超详细精读|八千字:AS-GCN
  7. 电子电气架构——车载总线CAN FD应用介绍
  8. 好无聊啊~ 来试试用Python采集下载漫画【附原码哟~】
  9. 时间 Date 循环计时器
  10. hi3516dv300环境配置