C++ переименованные требования: LegacyBidirectionalIterator
A LegacyBidirectionalIterator — это LegacyForwardIterator, который может перемещаться в обоих направлениях (т.е. может быть инкрементирован и декрементирован).
Если LegacyBidirectionalIterator it происходит из Container, то it's value_type совпадает с контейнером, поэтому обращение к значению (*it) получает значение value_type контейнера.
Требования
Тип It удовлетворяет требованиям LegacyBidirectionalIterator, если
- Тип
Itудовлетворяет требованиям LegacyForwardIterator
И, учитывая
-
aиb, lvalues типаIt -
reference, тип, обозначаемый std::iterator_traits<It>::reference
Следующие выражения должны быть допустимы и иметь указанные эффекты:
| Выражение | Возвращаемое значение | Эквивалентное выражение | Примечания |
|---|---|---|---|
--a | It& | Предпосылки:
Последующие условия:
|
|
a-- | преобразуется в const It& |
It temp = a; --a; return temp; | |
*a-- | reference |
Мутабельный LegacyBidirectionalIterator — это LegacyBidirectionalIterator, который дополнительно удовлетворяет требованиям LegacyOutputIterator.
Примечания
Итератор начала не может быть декрементирован, и поведение не определено, если оценивается --container.begin().
Двунаправленный итератор не обязан быть доступным для получения значения, чтобы быть декрементируемым (в частности, конечный итератор недоступен для получения значения, но может быть декрементирован).
КонцепцияДля определения
где концепция только для описания | (с C++20) |
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применимо к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
|
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/w/cpp/named_req/BidirectionalIterator