为什么擦除功能会导致运行时错误?

时间:2019-07-09 15:21:09

标签: vector stl

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)行出于某种原因给出了运行时错误。 请帮忙。

1 个答案:

答案 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