std:: input_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ヘッダーで定義
<iterator>
|
||
|
template
<
class
I
>
concept input_iterator
=
|
(C++20以降) | |
input_iterator
コンセプトは
input_or_output_iterator
を改良したもので、参照する値が(
indirectly_readable
を通じて)読み取り可能であること、およびイテレータコンセプトタグが存在することを要件として追加しています。
目次 |
、
、
イテレータコンセプトの決定
この概念の定義は、説明専用のエイリアステンプレート /*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>);
関連項目
|
(C++20)
|
型のオブジェクトがインクリメントおよびデリファレンス可能であることを指定する
(concept) |
|
(C++20)
|
input_iterator
が前方イテレータであり、等値比較とマルチパスをサポートすることを指定する
(concept) |