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

您所在的位置:网站首页 迭代序列是什么 c++ 标准STL中的vector earse()方法注意事项!(删除一个元素后 迭代器指针会自动指向下一个,不需要再手动++!!!)

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

2023-03-23 02:07| 来源: 网络整理| 查看: 265

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

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

编程要求

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

创建一个整型类型的向量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)

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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3