Как увеличить / уменьшить reverse_iterator на любое значение, используя difference_type

#c #reverse-iterator

#c #обратный итератор

Вопрос:

Я пытаюсь стереть определенный элемент списка из обратной позиции, используя reverse_iterator.Но в stl_iterator произошла ошибка компиляции.файл заголовка h.

Я пытаюсь сделать…

здесь input[] представляет собой массив целых чисел.

  list<int>:: reverse_iterator it = l.rbegin()  input[j];
                    l.erase( std::next(it).base() );
  

в stl_iterator отображается ошибка.файл h…

  reverse_iterator
      operator (difference_type __n) const
      { return reverse_iterator(current - __n); }
  

Мне нужно удалить определенный элемент, начиная с начала / конца этого списка.Это только для оптимизации или для уменьшения временных затрат.

Комментарии:

1. Вы ищете std::advance ?

2. итератор N принимает O (N) в std::list. Где оптимизация?

3. @Shloim, я не привел полный код, сэр. Хотя это O (n), но это помогает мне выполнять больше задач одновременно.

4. @JesperJuhl Я пытался с std:: advance, но я не могу. Вот почему я ищу решение.

5. @cpplearner сэр, на этот раз ошибки компиляции нет, но она не удаляет фактическую ошибку. Я даже не знаю функциональности std::next(l.rbegin(), ввод[j]). Как его удалить из списка? Не могли бы вы пояснить, пожалуйста?

Ответ №1:

Поддерживаются только итераторы произвольного доступа operator . Итератор списка не является итератором произвольного доступа. Чтобы продвинуть итератор неслучайного доступа, вы можете использовать std::advance или std::next . Вот так:

 std::next(l.rbegin(), input[j])