TInyVege
Duang~Duang
采纳率100%
2021-03-03 20:23

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条回答

  • weixin_42910064 泡视界 1月前

    错误在于

    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;
    		}
    	}
    点赞 2 评论 复制链接分享