std::experimental::ranges:: BidirectionalIterator
|
template
<
class
I
>
concept
bool
BidirectionalIterator
=
|
(ranges TS) | |
概念
BidirectionalIterator<I>
在
ForwardIterator
的基础上进行细化,增加了使迭代器向后移动的能力。
一个双向迭代器
r
被称为
可递减
,当且仅当存在某个
s
满足
++
s
==
r
。所有可递减迭代器
r
都应在表达式
--
r
和
r
--
的定义域内。
设
a
和
b
为类型
I
的可递减对象。仅当满足以下条件时,
BidirectionalIterator<I>
才成立:
- 前置递减产生一个引用操作数的左值: 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 ) 。
-
如果
等值保持性
表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性 。
- 表达式的输入由其操作数构成。
- 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。
每个要求保持相等性的表达式还必须满足 稳定性 要求:对此类表达式进行两次求值时,若输入对象相同且期间未对这些输入对象进行显式修改,则必须产生相等的输出结果。
除非另有说明,在 要求表达式 中使用的每个表达式都必须保持相等性且稳定,且该表达式的求值只能修改其非常量操作数。常量操作数不得被修改。