Namespaces
Variants

std:: input_iterator

From cppreference.net
Iterator library
Iterator concepts
input_iterator
(C++20)

Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(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 input_iterator =
std:: input_or_output_iterator < I > &&
std:: indirectly_readable < I > &&
requires { typename /*ITER_CONCEPT*/ < I > ; } &&

std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > ;
(C++20以降)

input_iterator コンセプトは input_or_output_iterator を改良したもので、参照する値が( indirectly_readable を通じて)読み取り可能であること、およびイテレータコンセプトタグが存在することを要件として追加しています。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、
タグ内のテキストは翻訳していません
- C++固有の用語(Iterator concept determinationなど)は原文のまま保持しました
- その他のテキスト(Notes、Example、See also)もC++文脈での専門用語として原文のまま保持しました
- 書式と構造は完全に保持されています

イテレータコンセプトの決定

この概念の定義は、説明専用のエイリアステンプレート /*ITER_CONCEPT*/ によって指定されます。

/*ITER_CONCEPT*/ < I > を決定するために、 ITER_TRAITS < I > を以下のように定義する: 特殊化 std:: iterator_traits < I > がプライマリテンプレートから生成されている場合は I を、それ以外の場合は std:: iterator_traits < I > を指す:

  • ITER_TRAITS < I > :: iterator_concept が有効かつ型を表す場合、 /*ITER_CONCEPT*/ < I > はその型を表す。
  • そうでなく、 ITER_TRAITS < I > :: iterator_category が有効かつ型を表す場合、 /*ITER_CONCEPT*/ < I > はその型を表す。
  • そうでなく、 std:: iterator_traits < I > がプライマリテンプレートから生成される場合、 /*ITER_CONCEPT*/ < I > std::random_access_iterator_tag を表す。
    (すなわち、 std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > true と仮定される。)
  • それ以外の場合、 /*ITER_CONCEPT*/ < I > は型を表さず、置換失敗となる。

注記

LegacyInputIterator 要件とは異なり、 input_iterator コンセプトは equality_comparable を要求しません。これは、入力イテレータが通常センチネルと比較されるためです。

最小入力イテレータ。

#include <cstddef>
#include <iterator>
class SimpleInputIterator
{
public:
    using difference_type = std::ptrdiff_t;
    using value_type = int;
    int operator*() const;
    SimpleInputIterator& operator++();
    void operator++(int) { ++*this; }
};
static_assert(std::input_iterator<SimpleInputIterator>);

関連項目

型のオブジェクトがインクリメントおよびデリファレンス可能であることを指定する
(concept)
input_iterator が前方イテレータであり、等値比較とマルチパスをサポートすることを指定する
(concept)