名前空間
変種
操作

名前付き要件:LegacyForwardIterator

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

LegacyForwardIterator はその指す先の要素からデータを読み込むことができる LegacyIterator です。

LegacyInputIteratorLegacyOutputIterator と異なり、マルチパスアルゴリズムで使用することができます。

目次

[編集]要件

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

  • ItLegacyInputIterator を満たす。
  • ItDefaultConstructible を満たす。
  • It 型のオブジェクトが後述のマルチパス保証を提供する。
  • std::iterator_traits<It>::reference が、
  • ItLegacyOutputIterator を満たすならば (It が可変ならば) T& であり、
  • そうでなければ ((It が定数であれば) const T& である。
(ただし Tstd::iterator_traits<It>::value_type によって表される型です)
  • 等しいおよび等しくないの比較は同じベースとなるシーケンスに対するすべてのイテレータおよび値初期化されたイテレータ(C++14以上)に渡って定義されます。

さらに、

  • It 型の逆参照可能なイテレータ i
  • std::iterator_traits<It>::reference によって表される型 reference

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

戻り値の型同等な式注釈
i++ItIt ip=i;++i;return ip;
*i++reference

可変LegacyForwardIteratorLegacyOutputIterator の要件を追加で満たす LegacyForwardIterator です。

[編集]マルチパス保証

It 型の逆参照可能なイテレータ a, b が与えられたとき、

  • ab が等しい (a == b が文脈的に true に変換できる) 場合、それらがどちらも逆参照可能でないか、 *a*b が同じオブジェクトに束縛される参照であるかの、いずれかです。
  • *a*b が同じオブジェクトを参照している場合は、 a == b です。
  • 可変な ForwardIterator イテレータを通した代入はイテレータを無効化しません (reference が真の参照として定義されることによる暗黙の事柄です)。
  • a のコピーをインクリメントしても a から読み込まれる値は変わりません (形式的には、 It が生のポインタ型であるか、式 (void)++It(a), *a が式 *a と同等であるかの、いずれかです)。
  • a == b であれば ++a == ++b が暗黙に成り立ちます。

単数イテレータ

値初期化された LegacyForwardIterator は何らかの未規定な空のコンテナの終端イテレータであるかのように動作します。 同じ型の値初期化されたすべての LegacyForwardIterator は等しく比較されます。
(C++14以上)

コンセプト

std::iterator_traits の定義のために、以下の説明専用コンセプトが定義されます。

template<class I>

concept __LegacyForwardIterator =
  __LegacyInputIterator<I>&& std::constructible_from<I>&&
  std::is_lvalue_reference_v<std::iter_reference_t<I>>&&
  std::same_as<
    std::remove_cvref_t<std::iter_reference_t<I>>,
    typename std::readable_traits<I>::value_type>&&
  requires(I i){
    {  i++}-> std::convertible_to<const I&>;
    {*i++}-> std::same_as<std::iter_reference_t<I>>;

  };

説明専用コンセプト __LegacyInputIterator<T>LegacyInputIterator#Concept で説明されています。

(C++20以上)

[編集]関連項目

InputIterator が等しさの比較とマルチパスをサポートする前進イテレータであることを指定します
(コンセプト)[edit]
close