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;
    		}
    	}
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。