迭代器的失效 ,请看下面的题目。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
///sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();++i)
{
if(nums[i]==val)
{
nums.erase(nums.begin()+i);
i--;//元素移除后i的值需要调整。
}
}
return nums.size();
}
};
如果没有下面的代码,则程序不是我们想要的结果。
i--;//元素移除后i的值需要调整。
我们再定义一个迭代器来试一试。
using namespace std;
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
///sort(nums.begin(),nums.end());
vector<int >::iterator it;
int num = 0;
for ( it = nums.begin(); it != nums.end(); )
{
vector<int>::iterator tmp;
//num++;
if (*it == val)
{
tmp = it++;
nums.erase(tmp);
//i--;//元素移除后i的值需要调整。
}
else {
it++;
}
}
return nums.size();
}
};
int main()
{
Solution s1;
int target = 2;
vector<int>tmp = { 2,3,4,5,6,7 };
//vector<int>::iterator it = tmp.begin();
s1.removeElement(tmp, target);
for (int& x :tmp )
{
cout << x << " ";
}
return 0;
}
用迭代器做会报错,目前还不知道错在哪。