gpt4 book ai didi

c++ - vector iterator not incrementable,这与iterator和erase的操作有关

转载 作者:行者123 更新时间:2023-11-28 02:06:33 27 4
gpt4 key购买 nike

我在网上找了很久。但是没有用。请帮助或尝试提供一些解决此问题的想法。

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

这是我的代码的类体和主要函数体。但是当我运行它时,编译器弹出一个窗口:

enter image description here

最佳答案

删除最后一个元素后,变成了nums.end()并且不允许增加它。

你不应该在删除后增加。这也将解决删除后跳过一个元素的问题。

还应删除 auto &it = nums.begin() 中的 &,因为使用它会使非常量引用的初始化无效。

试试这个:

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

关于c++ - vector iterator not incrementable,这与iterator和erase的操作有关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com