Почему функция стирания выдает ошибку времени выполнения? - PullRequest
1 голос
/ 09 июля 2019
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 Ответ

1 голос
/ 09 июля 2019

с стереть вы изменяете вектор , так что итератор становится недействительным, решение немного модифицирует ваш код:

  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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...