Именованные требования C++: LegacyBidirectionalIterator
LegacyBidirectionalIterator — это LegacyForwardIterator, который можно перемещать в обоих направлениях (то есть увеличивать и уменьшать).
Если LegacyBidirectionalIterator it происходит из Container, то it имеет такой же value_type, как и контейнер, поэтому разыменование (*it) даёт value_type контейнера.
Требования
Тип It удовлетворяет требованиям LegacyBidirectionalIterator, если
- Тип
Itудовлетворяет требованиям LegacyForwardIterator
и для
-
aиb— lvalue типаIt -
reference— тип, обозначаемый как std::iterator_traits<It>::reference
Следующие выражения должны быть корректными и иметь указанные эффекты:
| Выражение | Возвращаемое значение | Эквивалентное выражение | Примечания |
|---|---|---|---|
--a | It& | Предусловия:
Постусловия:
|
|
a-- | преобразуемый в constIt& | It temp = a; --a; return temp; | |
*a-- | reference |
Изменяемый LegacyBidirectionalIterator — это LegacyBidirectionalIterator, который также удовлетворяет требованиям LegacyOutputIterator.
Примечания
Итератор begin не допускает декремента, и поведение не определено, если вычисляется --container.begin().
Двунаправленный итератор не обязан допускать разыменование, чтобы допускать декремент (в частности, итератор end не допускает разыменование, но допускает декремент).
КонцепцияДля определения
концепт | (начиная с C++20) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
|
LWG 299 (N3066) | C++98 | тип возвращаемого значения *a-- должен былпреобразовываться в T | тип возвращаемого значения изменён наreference[1] |
| LWG 383 | C++98 |
b должен был допускать разыменование после --a |
Вместо этого требуется, чтобы a допускал разыменование |
|
LWG 1212 (N3066) | C++98 | тип возвращаемого значения *a-- не соответствовал типу возвращаемогозначения *a++, требуемому LegacyForwardIterator | тип возвращаемого значения изменён наreference |
- Изначально этот вопрос был урегулирован в N2758 (концепции итераторов), но позднее это решение было исключено из стандарта C++.
См. также
|
(C++20) | задаёт требования к forward_iterator как к двунаправленному итератору, поддерживающему перемещение назад (концепция) |
| Библиотека итераторов | предоставляет определения итераторов, свойств итераторов, адаптеров и вспомогательных функций |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/BidirectionalIterator