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();

答案是

上面那行是原来的

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

 

错误在于

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;
		}
	}