std::experimental::ranges:: BidirectionalIterator
|
Определено в заголовочном файле
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
BidirectionalIterator
=
|
(ranges TS) | |
Концепт
BidirectionalIterator<I>
расширяет
ForwardIterator
, добавляя возможность перемещения итератора в обратном направлении.
Двунаправленный итератор
r
называется
декрементируемым
тогда и только тогда, когда существует некоторый
s
такой, что
++
s
==
r
. Все декрементируемые итераторы
r
должны находиться в области определения выражений
--
r
и
r
--
.
Пусть
a
и
b
будут декрементируемыми объектами типа
I
.
BidirectionalIterator<I>
удовлетворяется только если:
- Префиксный декремент возвращает lvalue, ссылающееся на операнд: std:: addressof ( -- a ) == std:: addressof ( a ) .
- Постфиксный декремент возвращает предыдущее значение операнда: если bool ( a == b ) , то bool ( a -- == b ) .
- Постфиксный и префиксный декремент выполняют одинаковое изменение операнда: если bool ( a == b ) , то после вычисления как a -- , так и -- b , bool ( a == b ) остаётся истинным.
- Инкремент и декремент являются обратными операциями друг для друга:
-
-
Если
aинкрементируем и bool ( a == b ) , тогда bool ( -- ( ++ a ) == b ) . - Если bool ( a == b ) , тогда bool ( ++ ( -- a ) == b ) .
-
Если
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, изменённых выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные выходные данные при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.
Если не указано иное, каждое выражение, используемое в requires-expression , должно сохранять равенство и быть стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, являющиеся константными, не должны изменяться.