vector<int> a;
a.push_back(0);
int n = a.size();
int cnt = 0;
for (auto itr = a.begin(); itr != a.end(); itr++)
{
if(*itr == 0)
{
cnt++;
a.erase(itr);
}
}
代码正在插入非零的数字。
第a.erase(itr)
行出于某种原因给出了运行时错误。
请帮忙。
答案 0 :(得分:1)
使用擦除可以修改 vector ,从而使迭代器无效,这是一种修改您的代码的解决方案:
vector<int> a;
a.push_back(0);
int n=a.size();
int cnt=0;
auto itr=a.begin();
while (itr != a.end())
{
if(*itr == 0)
{
cnt++;
itr = a.erase(itr);
}
else
++itr;
}
请注意, n 和 count 的正确类型是size_type
而不是 int