名前空間
変種
操作

名前付き要件:LegacyBidirectionalIterator

提供: cppreference.com
< cpp‎ | named req
 
 
 

LegacyBidirectionalIterator は双方向に移動できる (つまりインクリメントとデクリメントができる) LegacyForwardIterator です。

目次

[編集]要件

以下の内容を満たす場合、型 ItLegacyBidirectionalIterator を満たします。

さらに、

  • It 型のイテレータ a, b
  • std::iterator_traits<It>::reference によって表される型 reference

が与えられたとき、以下の式が有効でなければならず、指定された効果を持たなければなりません。

戻り値同等な式注釈
--aIt&事前条件:
  • a がデクリメント可能 (a ==++b であるような b が存在する)

事後条件:

  • a が逆参照可能
  • --(++a)== a
  • --a ==--b の場合に a == b が成り立つ
  • a--a が同じイテレータオブジェクトを指し示す
a--const It& に変換可能It temp = a;

--a;

return temp;
*a--reference

可変LegacyBidirectionalIteratorLegacyOutputIterator の要件を追加で満たす LegacyBidirectionalIterator です。

[編集]ノート

begin イテレータはデクリメント可能ではありません。 --container.begin() が評価された場合、動作は未定義です。

任意の双方向イテレータが逆参照可能である必要やデクリメント可能である必要はありません (特に、 end イテレータは逆参照可能ではありませんがデクリメントは可能です)。

コンセプト

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>>;

  };

説明専用コンセプト __LegacyForwardIteratorLegacyForwardIterator#Concept で説明されています。

(C++20以上)

[編集]関連項目

ForwardIterator が後方移動をサポートする双方向イテレータであることを指定します
(コンセプト)[edit]
close