Что такое возвращаемое значение из оператора стирания std :: vector, согласно стандарту? - PullRequest
0 голосов
/ 12 сентября 2018

Я предпочитаю получать информацию из источника, в данном случае это ISO-IEC 14882, где метод стирания описывается следующим образом:

"стирание итератора (позиция const_iterator);
стирание итератора (сначала const_iterator, затем const_iterator);

Эффекты: недействительные итераторы и ссылки в или после точки удаления.

Сложность: деструктор T называется числом раз, равным количество стертых элементов, но оператор присваивания перемещения Т называется числом раз, равным количеству элементов в вектор после стертых элементов.

Броски: ничего, кроме исключения выбрасывается конструктором копирования, конструктором перемещения, присваиванием оператор или оператор присваивания перемещения T. "

Не могу найти информацию о возвращенном итераторе, конечно, я погуглил и получил:

Итератор, указывающий на новое местоположение следующего элемента последний элемент, стертый при вызове функции

Не могу понять, это описано в стандарте
Не могли бы вы указать мне на это?

Обновление: мой вопрос не о том, как vector::erase работает,
а точнее откуда в стандарте, поскольку я принимаю за надежный источник информации, мы можем вывести информацию о возвращаемом значении

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Информация находится в немного не интуитивном месте. То, что возвращает erase, подробно описано в разделе «Контейнеры последовательности» раздела «Общие требования к контейнерам», в частности, [sequence.reqmts] / 11

Итератор, возвращенный из a.erase(q), указывает на элемент, следующий сразу за q до удаления элемента. Если такого элемента не существует, возвращается a.end().

и [sequence.reqmts] / 12

Итератор, возвращаемый a.erase(q1, q2), указывает на элемент, на который указывает q2 до удаления любых элементов. Если такого элемента не существует, возвращается a.end().

0 голосов
/ 12 сентября 2018

Предположим, у вас есть вектор из 4 элементов, и что у вас есть итератор, ссылающийся на 2-й элемент.Если вы теперь используете стирание на этом итераторе, erase возвращает итератор, ссылающийся на то, что было третьим элементом, т. Е. Тот, который после 2-го элемента вы только что удалили, но теперь стал вторым из-за стирания.

...