跳到主要内容

C++ 命名要求: LegacyBidirectionalIterator

LegacyBidirectionalIterator 是一个 LegacyForwardIterator,可以双向移动(即递增和递减)。

如果一个 LegacyBidirectionalIterator it 源自一个 Container,那么 itvalue_type 与容器的 value_type 相同,因此解引用 (*it) 获取容器的 value_type

要求

如果类型 It 满足 LegacyBidirectionalIterator

并且,给定

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

表达式返回等价表达式备注
--aIt&前置条件: 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 是一个 LegacyBidirectionalIterator,它额外满足 LegacyOutputIterator 要求。

备注

begin 迭代器不可递减,如果计算 --container.begin(),则行为未定义。

双向迭代器不必可解引用才能递减(特别是,end 迭代器不可解引用但可递减)。

概念 (自 C++20 起)

点击展开

对于 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>>;
};

其中,仅用于说明的概念 __LegacyIteratorLegacyIterator#Concept 中描述。

缺陷报告

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

DR应用于发布时的行为正确行为
LWG 299 (N3066)C++98*a-- 的返回类型要求可转换为 T返回类型要求为 reference
LWG 383C++98--a 之后 b 要求可解引用a 代替要求可解引用

C++ 命名要求: LegacyBidirectionalIterator

LegacyBidirectionalIterator 是一个 LegacyForwardIterator,可以双向移动(即递增和递减)。

如果一个 LegacyBidirectionalIterator it 源自一个 Container,那么 itvalue_type 与容器的 value_type 相同,因此解引用 (*it) 获取容器的 value_type

要求

如果类型 It 满足 LegacyBidirectionalIterator

并且,给定

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

表达式返回等价表达式备注
--aIt&前置条件: 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 是一个 LegacyBidirectionalIterator,它额外满足 LegacyOutputIterator 要求。

备注

begin 迭代器不可递减,如果计算 --container.begin(),则行为未定义。

双向迭代器不必可解引用才能递减(特别是,end 迭代器不可解引用但可递减)。

概念 (自 C++20 起)

点击展开

对于 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>>;
};

其中,仅用于说明的概念 __LegacyIteratorLegacyIterator#Concept 中描述。

缺陷报告

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

DR应用于发布时的行为正确行为
LWG 299 (N3066)C++98*a-- 的返回类型要求可转换为 T返回类型要求为 reference
LWG 383C++98--a 之后 b 要求可解引用a 代替要求可解引用