名前空間
変種
操作

名前付き要件: LegacyBidirectionalIterator

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
基本
レイアウト
ライブラリ全体
コンテナ
コンテナの要素
イテレータ
LegacyBidirectionalIterator
ストリーム入出力
乱数
並行処理
(C++11)

(C++11)
(C++11)
その他
 

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

目次

[編集] 要件

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

さらに、

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

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

戻り値 同等な式 注釈
--a It& 事前条件:
  • 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<I&>;
    {  i-- } -> const I&;
    { *i-- } -> std::Same<std::iter_reference_t<I>>;

  };

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

(C++20以上)

[編集] 関連項目

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