Duang~Duang 2021-03-03 20:23 采纳率: 50%
浏览 87
已采纳

c++ vector容器使用erase的问题

题目是删除数组中的重复的元素

我的方法是

       int removeDuplicates(vector<int>& nums) {

		if (nums.size() == 0)
		{
			return 0;
		}

		for (vector<int>::iterator it = nums.begin(); it != nums.end();) {
			vector<int>::iterator it2 = it++;

			if (*it == *it2)
			{
				it = nums.erase(it);
			}
			else
			{
				it++;
			}
		}
		return nums.size();

答案是

上面那行是原来的

不知道为什么会是这样的结果

 

  • 写回答

1条回答 默认 最新

  • 泡视界 2021-03-04 10:04
    关注

    错误在于

    vector<int>::iterator it2 = it++; 和 it++;两句会导致it跳过一些重复元素。

    将vector<int>::iterator it2 = it++; 改为 vector<int>::iterator it2 = it+1; 即可。但是还要考虑 it2 取到 end的情况,所以要加上保护。

    	for (vector<int>::iterator it = nums.begin(); it != nums.end();) {
    		vector<int>::iterator it2 = it+1;
    		if (it2!=nums.end()) {
    			if (*it == *it2)
    			{
    				it = nums.erase(it);
    			}
    			else
    			{
    				it++;
    			}
    		}
    		else {
    			it++;//or break;
    		}
    	}
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因