std::input_iterator
From cppreference.com
| ヘッダ <iterator> で定義 |
||
| template< class I > concept input_iterator = |
(C++20以降) | |
input_iterator コンセプトは input_or_output_iterator の洗練であり、参照される値が読み取り可能であること (indirectly_readable 経由) とイテレータコンセプトタグが存在することという要件を追加します。
目次 |
[編集] イテレータコンセプトの決定
このコンセプトの定義は、展示専用のエイリアステンプレート /*ITER_CONCEPT*/ を介して指定されます。
/*ITER_CONCEPT*/<I> を決定するために、特殊化 std::iterator_traits<I> がプライマリテンプレートから生成される場合、ITER_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 を表します。
- そうでなければ、/*ITER_CONCEPT*/<I> は型を表さず、置換失敗となります。
[編集] 注釈
LegacyInputIterator の要件とは異なり、input_iterator コンセプトは equality_comparable を要求しません。これは、入力イテレータが通常、番兵と比較されるためです。
[編集] 例
最小の入力イテレータ。
#include <cstddef> #include <iterator> struct SimpleInputIterator { 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) |
ある型のオブジェクトがインクリメントおよび間接参照できることを規定する (コンセプト) |
| (C++20) |
input_iterator は、等値比較とマルチパスをサポートする前方イテレータであることを指定します。(コンセプト) |