#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])