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 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services