名前空間
変種
操作

std:: weakly_incrementable

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
weakly_incrementable
(C++20)
イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(C++20)
イテレータアダプタ
Rangeアクセス
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
ヘッダ <iterator> で定義
template< class I >

    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // 等価性を保持する必要はない
            i++;                         // 等価性を保持する必要はない

        };
(C++20以降)

/*is-signed-integer-like*/ の定義については、is-integer-like を参照してください。

このconceptは、前置インクリメント演算子と後置インクリメント演算子でインクリメント可能な型に対する要件を指定しますが、これらのインクリメント操作は必ずしも 等価性を保持 する必要はなく、型自体は std::equality_comparable である必要もありません。

std::weakly_incrementable 型の場合、a == b++a == ++b を意味しません。weakly incrementable 型に対するアルゴリズムは、単一パスアルゴリズムである必要があります。これらのアルゴリズムは、std::istream_iterator を介して、入力データのソースとして istream で使用できます。

[編集] 意味要件

I のオブジェクト i について、以下のすべての条件が満たされている場合のみ、Istd::weakly_incrementable をモデル化します。

  • ++i および i++ は同じドメインを持ちます。
  • i がインクリメント可能である場合、++ii++ の両方が i を進めます。
  • i がインクリメント可能である場合、std::addressof(++i) == std::addressof(i) となります。

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
P2325R3 C++20 default_initializable が要求されていました。 要求されない

[編集] 関連項目

weakly_incrementable 型のインクリメント操作が 等価性を保持 し、型が equality_comparable であることを指定します。
(コンセプト) [編集]
English 日本語 中文(简体) 中文(繁體)