[英]vector iterator not incrementable, which is related to the operation of iterator and erase
我正在網上搜索很長時間。 但是沒用。 請幫助或嘗試提供一些解決此問題的想法。
class Solution{
public:
int removeElement(vector<int> &nums, int val)
{
for (auto &it = nums.begin(); it != nums.end(); ++it)
{
if (*it == val)
{
it = nums.erase(it);
}
}
return nums.size();
}
};
int main(void)
{
Solution s;
vector<int> vi = { 3, 2, 2, 3 };
cout << "size = " << s.removeElement(vi, 3) << endl;
for (auto &i : vi)
{
cout << i << " ";
}
cout << endl;
return 0;
}
這是我代碼的類主體和主要功能主體。 但是當我運行它時,編譯器彈出一個窗口:
刪除最后一個元素后, it
元素it
變為nums.end()
並不允許對其進行遞增。
刪除后,您不應該增加it
。 這也將解決擦除后跳過一個元素的問題。
此外,應刪除&
in auto &it = nums.begin()
因為使用它會使其無效地初始化非const引用。
嘗試這個:
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
class Solution{
public:
int removeElement(vector<int> &nums, int val)
{
for (auto it = nums.begin(); it != nums.end();)
{
if (*it == val)
{
it = nums.erase(it);
} else
{
++it;
}
}
return nums.size();
}
};
int main(void)
{
Solution s;
vector<int> vi = { 3, 2, 3, 3, 2, 3 }; // added testcase of consecutive 3
cout << "size = " << s.removeElement(vi, 3) << endl;
for (auto &i : vi)
{
cout << i << " ";
}
cout << endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.