c++ 标准STL中的vector earse()方法注意事项!(删除一个元素后 迭代器指针会自动指向下一个,不需要再手动++!!!)

erase()删除一个元素后 迭代器指针会自动指向下一个,不需要再手动++!!!

今天上头歌写题,作为一个学java,没怎么接触过c++的小白来说,这道非常简单的题令我百思不得其解,吃了没学过c++STL的亏。题目如下:

编程要求

本关的编程任务是补全右侧代码片段mainBeginEnd中间的代码,具体要求如下:

  • 创建一个整型类型的向量vec
  • 读取数据:序列个数n,以及n个整数并插入向量vec
  • 通过erase操作删除向量vec中的重复元素:保留第一次出现的元素,删除之后出现的重复元素;
  • 使用Algorithm模板函数sort对向量vec里的元素从小到大排序;
  • 遍历向量vec并输出:元素中间空格隔开,末尾加换行符\n
  • 调用clear清空向量。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入: 7 1 2 3 1 2 3 4 预期输出: 1 2 3 4 0

输入格式: 第一行:序列个数n 第二行:n个整数序列 输出格式: 第一行:遍历并输出向量,中间空格隔开,末尾换行\n 第二行:非学员输出,数值0用于检测向量是否清空

题目大致意思就是教你使用STL里面的vector,其他操作没什么问题,主要问题出现在删除重复元素这里

 一开始我写的代码如下:

 

 

思路非常简单,直接用一个二重循环查找搞定;但是出现了下面这种情况

 当数组中元素全部相同时,会删不干净。一开始以为逻辑出了问题,debug了半天,结果发现是没注意到vector的erase()方法的一个坑:

使用earse(iterator positon)删除一个元素之后,形参指针已经指向了被删除元素的下一个元素,再进行it2++会跳过下一个元素

也就是说删除一个元素后 迭代器指针会自动指向下一个,不需要再手动++!!!

于是修改代码如下:(顺利AC)

红色划线部分为修改的地方

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值