Namespaces
Variants

C++ named requirements: LegacyBidirectionalIterator

From cppreference.net
C++ named requirements

一个 LegacyBidirectionalIterator 是一种 LegacyForwardIterator ,它能够双向移动(即可递增和递减)。

若一个 LegacyBidirectionalIterator it 源自某个 Container ,则该迭代器的 value_type 与容器的 value_type 相同,因此解引用操作( * it )将获得容器的 value_type

目录

要求

类型 It 满足 LegacyBidirectionalIterator

并且,给定

以下表达式必须有效并具有其指定效果:

表达式 返回值 等价表达式 备注
-- a It& 前置条件:
  • a 可递减(存在这样的 b 使得 a == ++ b

后置条件:

  • a 可解引用
  • -- ( ++ a ) == a
  • -- a == -- b a == b
  • a -- a 指向同一迭代器对象
a -- 可转换为 const It & It temp = a ;

-- a ;

return temp ;
* a -- reference

一个 可变 LegacyBidirectionalIterator 是指同时满足 LegacyOutputIterator 要求的 LegacyBidirectionalIterator

注释

起始迭代器不可递减,若计算 -- container. begin ( ) 将导致未定义行为。

双向迭代器不要求可解引用才能递减(特别是,尾后迭代器不可解引用但可以递减)。

概念

为定义 std::iterator_traits ,特定义以下仅用于说明的概念。

template < class I >

concept __LegacyBidirectionalIterator =
__LegacyForwardIterator < I > && requires ( I i )
{
{ -- i } - > std:: same_as < I & > ;
{ i -- } - > std:: convertible_to < const I & > ;
{ * i -- } - > std:: same_as < std:: iter_reference_t < I >> ;

} ;

其中仅用于说明的概念 __LegacyForwardIterator LegacyForwardIterator 中描述。

(C++20 起)

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时行为 正确行为
LWG 299
( N3066 )
C++98 * a -- 的返回类型要求
可转换为 T
将返回类型改为
reference [1]
LWG 383 C++98 要求在 -- a b 必须可解引用 改为要求 a 必须可解引用
LWG 1212
( N3066 )
C++98 * a -- 的返回类型与
LegacyForwardIterator 要求的
* a ++ 返回类型不匹配
将返回类型改为
reference
  1. 该问题最初由 N2758 (迭代器概念)解决,但后续从 C++ 标准中被移除。

参见

指定 forward_iterator 为双向迭代器,支持向后移动
(概念)
迭代器库 提供迭代器、迭代器特征、适配器及工具函数的定义