C++ 具名要求:遗留双向迭代器 (LegacyBidirectionalIterator)

< cpp‎ | named req
 
 
 

遗留双向迭代器 (LegacyBidirectionalIterator) 是能双向移动(即自增与自减)的遗留向前迭代器 (LegacyForwardIterator)

要求

以下情况下,类型 It 满足 遗留双向迭代器 (LegacyBidirectionalIterator)

且,给定

  • ab,为类型 It 的迭代器
  • reference,为 std::iterator_traits<It>::reference 所指代的类型

则下列表达式必须合法并拥有其效果

表达式 返回 等价表达式 注意
--a It& 前提条件:
  • a 可自减(存在满足 a == ++bb

后条件:

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

--a;

return temp;
*a-- reference

可变(mutable)遗留双向迭代器 (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 起)

参阅

指定 forward_iterator 为双向迭代器,支持向后移动
(概念)