стирание элементов из вектора (хакерранк) - PullRequest
0 голосов
/ 03 апреля 2020

Я новичок в C ++. Я пытался решить эту проблему , но не смог, поэтому я проверил решение позже, но есть некоторые строки, которые я не понимаю:

v.erase(v.begin() + x - 1); // i want to know why the "-1" is put here
v.erase(v.begin() + b - 1, v.begin() + c - 1);

Вот код:

int main()
{
  int N, a, x, b, c;
  vector <int> v;
  cin >> N;
  for (int i = 0; i<N; i++)
  {
    cin >> a;
    v.push_back(a);
  }
  cin >> x >> b >> c;
  v.erase(v.begin() + x - 1);
  v.erase(v.begin() + b - 1, v.begin() + c - 1);
  cout << v.size() << endl;
  for (int i = 0; i < v.size(); i++)
  {
    cout << v[i] << " ";
  }
}

1 Ответ

0 голосов
/ 03 апреля 2020

Цель этого вопроса - познакомить вас с двумя общими синтаксисами метода векторного стирания. Для удаления отдельного элемента используйте

v.erase ( передать итератор, указывающий на элемент, который вы хотите стереть )

Например, v.erase(v.begin()) сотрет первый элемент вектора или другими словами удалит элемент в позиции 0 вектора.

Так как здесь v.begin() является итератором первого элемента вектора, при условии, что вектор не пуст.

Аналогично,

v.erase(v.begin() + x -1);

стирает элемент в позиции вектора x.

Теперь для удаления диапазона в векторе используется перегруженный метод стирания. Он используется следующим образом:

v.erase (iter1, iter2)

Он удалит все элементы в диапазоне от iter1 до iter2, но не включая iter2, то есть элементы в диапазоне [iter2, iter2) будет удален. Помните, что iter2 не будет удален. Таким образом, этот код

v.erase(v.begin() + b - 1, v.begin() + c - 1);

удалит все элементы из индекса b в индекс c, но не включая индекс c.

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