C++ именованные требования: LegacyIterator
LegacyIterator требования описывают типы, которые могут быть использованы для идентификации и обхода элементов контейнера.
LegacyIterator это базовый набор требований, используемых другими типами итераторов: LegacyInputIterator, LegacyOutputIterator, LegacyForwardIterator, LegacyBidirectionalIterator, и LegacyRandomAccessIterator. Итераторы можно рассматривать как абстракцию указателей.
Требования
Тип It удовлетворяет LegacyIterator если
- Тип
Itудовлетворяет CopyConstructible, и - Тип
Itудовлетворяет CopyAssignable, и - Тип
Itудовлетворяет Destructible, и - lvalues типа
ItудовлетворяютSwappable, и std::iterator_traits<It>имеют определения типов членовvalue_type,difference_type,reference,pointer, иiterator_category, и- Дано
r, левостороннее значение типаIt, следующие выражения должны быть валидными и иметь указанные эффекты:
| Выражение | Возвращаемое значение | Предусловие |
|---|---|---|
*r
|
unspecified | r является «разыменовываемым» (см. ниже)
|
++r
|
It&
|
r является «инкрементируемым» (поведение выражения ++r определено)
|
Разыменовываемый итератор
Итераторы, для которых определно поведение *i называются «разыменовываемыми».
Итераторы не являются разыменовываемыми если
- они past-the-end iterators (включая указатель за концом массива) или before-begin iterators. Подобные итераторы могут быть разыменовываемыми в конкретной реализации, но библиотека никогда не предположит, что этого.
- это «сингулярные» итераторы, то есть итераторы, не связанные ни с какой последовательностью. Нулевой указатель, так-же, как и указатель, созданный конструктором по умолчанию (содержащий неопределенное значение) является сингулярным
- они являются invalidated одной из операций, аннулирующих итератор, над последовательностью, на которую они ссылаются.
ConceptДля определения std::iterator_traits, следующий (только для объяснения) концепт определен. <tbody> </tbody>
где (только для объяснения) концепт |
(начиная с C++20) |
Отчеты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 3420 | C++20 | the концепт (только для объяснения) проверяет copyable first
|
copyable проверяется толькое если выражение-требование дает истинный ответ
|
Смотри также
(C++20) |
указывает, что объекты типа могут быть инкрементированы и разыменованы (концепт) |
| Iterator library | предоставляет определения для итераторов, свойств итераторов, адаптеров и служебных функций. |