C++ требования к именованным типам: LegacyIterator
Требования к типу LegacyIterator описывают типы, которые могут использоваться для идентификации и обхода элементов контейнера.
LegacyIterator является базовым набором требований, используемым другими типами итераторов: LegacyInputIterator, LegacyOutputIterator, LegacyForwardIterator, LegacyBidirectionalIterator и LegacyRandomAccessIterator. Итераторы можно рассматривать как абстракцию указателей.
Все категории итераторов требуют только тех функций, которые реализуемы для данной категории за постоянное (амортизированное) время. Поэтому таблицы требований и определения концепций (с C++20) для итераторов не указывают сложность.
Требования
Тип It удовлетворяет требованиям LegacyIterator, если
- Тип
Itудовлетворяет CopyConstructible, и - Тип
Itудовлетворяет CopyAssignable, и - Тип
Itудовлетворяет Destructible, и - Л-значения типа
Itудовлетворяют Swappable, и - Тип
std::iterator_traits<It>имеет определения типовvalue_type(до C++20),difference_type,reference,pointer, иiterator_category, и - При заданном
r, л-значении типаIt, следующие выражения должны быть допустимыми и иметь указанные эффекты:
| Выражение | Тип возвращаемого значения | Предпосылка |
|---|---|---|
*r |
неопределено |
r является дериферируемым |
++r |
It& |
r является инкрементируемым (поведение выражения ++r определено) |
КонцепцияДля определения
где концепция |
(с C++20) |
Отчёты об ошибках
Следующие отчёты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применимо к | Поведение, опубликованное | Корректное поведение |
|---|---|---|---|
| LWG 3420 | C++20 | концепция только для демонстрации проверяет copyable сначала |
copyable проверяется только если выражение requires истинно |
См. также
|
(C++20) |
указывает, что объекты типа могут быть инкрементированы и дериферированы (концепция) |
| Библиотека итераторов | предоставляет определения для итераторов, характеристик итераторов, адаптеров и вспомогательных функций |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/Iterator