実験的ライブラリヘッダー <experimental/ranges/iterator>
From cppreference.com
< cpp | header | experimental
このヘッダーは、ranges ライブラリの一部です。
目次 |
[編集]
std::experimental::ranges 名前空間で定義されます。 |
[編集] イテレータコンセプト
演算子 * を適用することで読み取り可能であることを指定します。(concept) | |
| イテレータが参照するオブジェクトに値を書き込めることを規定する (concept) | |
Semiregular 型が前置および後置インクリメント演算子でインクリメントできることを指定します。(concept) | |
WeaklyIncrementable 型のインクリメント操作が等価性を保持し、その型がEqualityComparableであることを指定します。(concept) | |
| ある型のオブジェクトがインクリメントおよび間接参照できることを規定する (concept) | |
Iterator 型のセンチネルであることを指定します。(concept) | |
イテレータとセンチネルに-演算子を適用して、それらの差を定数時間で計算できることを指定します。(concept) | |
| 型が入力イテレータであること、すなわち、参照先の値を読み取ることができ、前置および後置インクリメントの両方が可能であることを規定する (concept) | |
| 型が与えられた値型に対する出力イテレータであること、すなわち、その型の値を書き込むことができ、前置および後置インクリメントの両方が可能であることを規定する (concept) | |
InputIteratorがフォワードイテレータであり、等価比較と複数パスをサポートすることを指定します。(concept) | |
ForwardIteratorが双方向イテレータであり、後方移動をサポートすることを指定します。(concept) | |
BidirectionalIteratorがランダムアクセスイテレータであり、定数時間での前進と添え字アクセスをサポートすることを指定します。(concept) |
[編集] 間接呼び出し可能コンセプト
Readable型のデリファレンス結果で呼び出し可能型を呼び出せることを指定します。(concept) | |
Readable型のデリファレンス結果で呼び出された呼び出し可能オブジェクトがPredicateを満たすことを指定します。(concept) | |
いくつかのReadable型のデリファレンス結果で呼び出された呼び出し可能オブジェクトがRelationを満たすことを指定します。(concept) | |
いくつかのReadable型のデリファレンス結果で呼び出された呼び出し可能オブジェクトがStrictWeakOrderを満たすことを指定します。(concept) |
[編集] 共通アルゴリズム要件
Readable型からWritable型へ値を移動できることを指定します。(concept) | |
Readable型からWritable型へ値を移動でき、その移動が中間オブジェクトを介して行われる可能性があることを指定します。(concept) | |
Readable型からWritable型へ値をコピーできることを指定します。(concept) | |
Readable型からWritable型へ値をコピーでき、そのコピーが中間オブジェクトを介して行われる可能性があることを指定します。(concept) | |
2つのReadable型によって参照される値を交換できることを指定します。(concept) | |
2つのReadable型によって参照される値を比較できることを指定します。(concept) | |
| 要素をインプレースで並べ替えるアルゴリズムの共通要件を規定する (concept) | |
| ソート済みのシーケンスを要素をコピーして出力シーケンスにマージするアルゴリズムの要件を規定する (concept) | |
| シーケンスを順序付きシーケンスに並べ替えるアルゴリズムの共通要件を規定する (concept) |
[編集] コンセプトユーティリティ
いくつかのReadable型のデリファレンス結果を呼び出し可能オブジェクトで呼び出した結果を計算します。(class template) | |
| 射影を受け入れるアルゴリズムの制約を指定するためのヘルパーテンプレート (class template) |
[編集] イテレータプリミティブ
[編集] イテレータユーティリティ
std::experimental::ranges 名前空間で定義されます。 | |
| オブジェクトの間接参照の結果を、その関連する右辺値参照型にキャストする (customization point object) | |
| 2つのデリファレンス可能なオブジェクトによって参照される値を交換します。 (customization point object) | |
[編集] イテレータトレイト
std::experimental::ranges 名前空間で定義されます。 | |
WeaklyIncrementable型の差分型を取得します。(class template) | |
Readable型の値型を取得します。(class template) | |
| 入力イテレータ型のイテレータカテゴリを取得します。 (class template) | |
| イテレータの関連型を収集する互換性トレイトクラス。 (alias template) | |
| デリファレンス可能なオブジェクトに関連付けられた参照型を取得します。 (alias template) | |
[編集] イテレータカテゴリタグ
std::experimental::ranges 名前空間で定義されます。 | |
| イテレータカテゴリを示すために使用される空のクラス型 (class) | |
[編集] std::iterator_traits の特殊化
| 名前空間
std で定義 | |
| ranges TSイテレータのstd::iterator_traitsを特殊化します。 (class template specialization) | |
[編集] イテレータ操作
std::experimental::ranges 名前空間で定義されます。 | |
| イテレータを指定された距離だけ進める (function template) | |
| イテレータとセンチネルの間の距離、または範囲の開始と終了の間の距離を返します。 (function template) | |
| イテレータをインクリメントする (function template) | |
| イテレータをデクリメントする (function template) | |
[編集] イテレータアダプタ
std::experimental::ranges 名前空間で定義されます。 | |
| 逆順走査のためのイテレータアダプタ (class template) | |
| コンテナの末尾への挿入のためのイテレータアダプタ (class template) | |
| コンテナの先頭への挿入のためのイテレータアダプタ (class template) | |
| コンテナへの挿入のためのイテレータアダプタ (class template) | |
| rvalue参照にデリファレンスするイテレータアダプタ。 (class template) | |
move_iteratorと併用するためのセンチネルアダプタ。(class template) | |
| レガシーアルゴリズムで使用するために、イテレータとセンチネルのペアを共通のイテレータ型にアダプタします。 (class template) | |
| 開始位置からの距離を追跡するイテレータアダプタ。 (class template) | |
| 範囲の境界を知っているイテレータ型と併用するための空のセンチネル型。 (class) | |
| ぶら下がっている可能性のあるイテレータのラッパー。 (class template) | |
rvalue範囲のイテレータ型をdanglingでラップするエイリアステンプレート。(alias template) | |
| 無限範囲を示すために任意のイテレータと併用されるセンチネル型。 (class) | |
[編集] ストリームイテレータ
std::experimental::ranges 名前空間で定義されます。 | |
| std::basic_istream から読み取る入力イテレータ (class template) | |
| std::basic_ostream に書き込む出力イテレータ (class template) | |
| std::basic_streambuf から読み取る入力イテレータ (class template) | |
| std::basic_streambuf に書き込む出力イテレータ (class template) | |
[編集] シノプシス
namespace std { namespace experimental { namespace ranges { inline namespace v1 { template <class T> concept bool /* dereferenceable */ // exposition only = requires(T& t) { {*t} -> auto&&; }; namespace { constexpr /* unspecified */ iter_move = /* unspecified */; constexpr /* unspecified */ iter_swap = /* unspecified */; } template <class> struct difference_type; template <class T> using difference_type_t = typename difference_type<T>::type; template <class> struct value_type; template <class T> using value_type_t = typename value_type<T>::type; template <class> struct iterator_category; template <class T> using iterator_category_t = typename iterator_category<T>::type; template </* dereferenceable */ T> using reference_t = decltype(*declval<T&>()); template </* dereferenceable */ T> requires /* see definition */ using rvalue_reference_t = decltype(ranges::iter_move(declval<T&>())); template <class In> concept bool Readable = /* see definition */; template <class Out, class T> concept bool Writable = /* see definition */; template <class I> concept bool WeaklyIncrementable = /* see definition */; template <class I> concept bool Incrementable = /* see definition */; template <class I> concept bool Iterator = /* see definition */; template <class S, class I> concept bool Sentinel = /* see definition */; template <class S, class I> constexpr bool disable_sized_sentinel = false; template <class S, class I> concept bool SizedSentinel = /* see definition */; template <class I> concept bool InputIterator = /* see definition */; template <class I> concept bool OutputIterator = /* see definition */; template <class I> concept bool ForwardIterator = /* see definition */; template <class I> concept bool BidirectionalIterator = /* see definition */; template <class I> concept bool RandomAccessIterator = /* see definition */; template <class F, class I> concept bool IndirectUnaryInvocable = /* see definition */; template <class F, class I> concept bool IndirectRegularUnaryInvocable = /* see definition */; template <class F, class I> concept bool IndirectUnaryPredicate = /* see definition */; template <class F, class I1, class I2 = I1> concept bool IndirectRelation = /* see definition */; template <class F, class I1, class I2 = I1> concept bool IndirectStrictWeakOrder = /* see definition */; template <class> struct indirect_result_of; template <class F, class... Is> requires Invocable<F, reference_t<Is>...> struct indirect_result_of<F(Is...)>; template <class F> using indirect_result_of_t = typename indirect_result_of<F>::type; template <Readable I, IndirectRegularUnaryInvocable<I> Proj> struct projected; template <WeaklyIncrementable I, class Proj> struct difference_type<projected<I, Proj>>; template <class In, class Out> concept bool IndirectlyMovable = /* see definition */; template <class In, class Out> concept bool IndirectlyMovableStorable = /* see definition */; template <class In, class Out> concept bool IndirectlyCopyable = /* see definition */; template <class In, class Out> concept bool IndirectlyCopyableStorable = /* see definition */; template <class I1, class I2 = I1> concept bool IndirectlySwappable = /* see definition */; template <class I1, class I2, class R = equal_to<>, class P1 = identity, class P2 = identity> concept bool IndirectlyComparable = /* see definition */; template <class I> concept bool Permutable = /* see definition */; template <class I1, class I2, class Out, class R = less<>, class P1 = identity, class P2 = identity> concept bool Mergeable = /* see definition */; template <class I, class R = less<>, class P = identity> concept bool Sortable = /* see definition */; template <class Iterator> using iterator_traits = /* see definition */; template <Readable T> using iter_common_reference_t = common_reference_t<reference_t<T>, value_type_t<T>&>; struct output_iterator_tag { }; struct input_iterator_tag { }; struct forward_iterator_tag : input_iterator_tag { }; struct bidirectional_iterator_tag : forward_iterator_tag { }; struct random_access_iterator_tag : bidirectional_iterator_tag { }; namespace { constexpr /* unspecified */ advance = /* unspecified */; constexpr /* unspecified */ distance = /* unspecified */; constexpr /* unspecified */ next = /* unspecified */; constexpr /* unspecified */ prev = /* unspecified */; } template <BidirectionalIterator I> class reverse_iterator; template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator==( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator!=( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>=( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<=( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <class I1, class I2> requires SizedSentinel<I1, I2> constexpr difference_type_t<I2> operator-( const reverse_iterator<I1>& x, const reverse_iterator<I2>& y); template <RandomAccessIterator I> constexpr reverse_iterator<I> operator+( difference_type_t<I> n, const reverse_iterator<I>& x); template <BidirectionalIterator I> constexpr reverse_iterator<I> make_reverse_iterator(I i); template <class Container> class back_insert_iterator; template <class Container> back_insert_iterator<Container> back_inserter(Container& x); template <class Container> class front_insert_iterator; template <class Container> front_insert_iterator<Container> front_inserter(Container& x); template <class Container> class insert_iterator; template <class Container> insert_iterator<Container> inserter(Container& x, iterator_t<Container> i); template <InputIterator I> class move_iterator; template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator==( const move_iterator<I1>& x, const move_iterator<I2>& y); template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator!=( const move_iterator<I1>& x, const move_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<( const move_iterator<I1>& x, const move_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<=( const move_iterator<I1>& x, const move_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>( const move_iterator<I1>& x, const move_iterator<I2>& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>=( const move_iterator<I1>& x, const move_iterator<I2>& y); template <class I1, class I2> requires SizedSentinel<I1, I2> constexpr difference_type_t<I2> operator-( const move_iterator<I1>& x, const move_iterator<I2>& y); template <RandomAccessIterator I> constexpr move_iterator<I> operator+( difference_type_t<I> n, const move_iterator<I>& x); template <InputIterator I> constexpr move_iterator<I> make_move_iterator(I i); template <Semiregular S> class move_sentinel; template <class I, Sentinel<I> S> constexpr bool operator==( const move_iterator<I>& i, const move_sentinel<S>& s); template <class I, Sentinel<I> S> constexpr bool operator==( const move_sentinel<S>& s, const move_iterator<I>& i); template <class I, Sentinel<I> S> constexpr bool operator!=( const move_iterator<I>& i, const move_sentinel<S>& s); template <class I, Sentinel<I> S> constexpr bool operator!=( const move_sentinel<S>& s, const move_iterator<I>& i); template <class I, SizedSentinel<I> S> constexpr difference_type_t<I> operator-( const move_sentinel<S>& s, const move_iterator<I>& i); template <class I, SizedSentinel<I> S> constexpr difference_type_t<I> operator-( const move_iterator<I>& i, const move_sentinel<S>& s); template <Semiregular S> constexpr move_sentinel<S> make_move_sentinel(S s); template <Iterator I, Sentinel<I> S> requires !Same<I, S> class common_iterator; template <Readable I, class S> struct value_type<common_iterator<I, S>>; template <InputIterator I, class S> struct iterator_category<common_iterator<I, S>>; template <ForwardIterator I, class S> struct iterator_category<common_iterator<I, S>>; template <class I1, class I2, Sentinel<I2> S1, Sentinel<I1> S2> bool operator==( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y); template <class I1, class I2, Sentinel<I2> S1, Sentinel<I1> S2> requires EqualityComparableWith<I1, I2> bool operator==( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y); template <class I1, class I2, Sentinel<I2> S1, Sentinel<I1> S2> bool operator!=( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y); template <class I2, SizedSentinel<I2> I1, SizedSentinel<I2> S1, SizedSentinel<I1> S2> difference_type_t<I2> operator-( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y); class default_sentinel; template <Iterator I> class counted_iterator; template <class I1, class I2> requires Common<I1, I2> constexpr bool operator==( const counted_iterator<I1>& x, const counted_iterator<I2>& y); constexpr bool operator==( const counted_iterator<auto>& x, default_sentinel); constexpr bool operator==( default_sentinel, const counted_iterator<auto>& x); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator!=( const counted_iterator<I1>& x, const counted_iterator<I2>& y); constexpr bool operator!=( const counted_iterator<auto>& x, default_sentinel y); constexpr bool operator!=( default_sentinel x, const counted_iterator<auto>& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator<( const counted_iterator<I1>& x, const counted_iterator<I2>& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator<=( const counted_iterator<I1>& x, const counted_iterator<I2>& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator>( const counted_iterator<I1>& x, const counted_iterator<I2>& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator>=( const counted_iterator<I1>& x, const counted_iterator<I2>& y); template <class I1, class I2> requires Common<I1, I2> constexpr difference_type_t<I2> operator-( const counted_iterator<I1>& x, const counted_iterator<I2>& y); template <class I> constexpr difference_type_t<I> operator-( const counted_iterator<I>& x, default_sentinel y); template <class I> constexpr difference_type_t<I> operator-( default_sentinel x, const counted_iterator<I>& y); template <RandomAccessIterator I> constexpr counted_iterator<I> operator+(difference_type_t<I> n, const counted_iterator<I>& x); template <Iterator I> constexpr counted_iterator<I> make_counted_iterator(I i, difference_type_t<I> n); class unreachable; template <Iterator I> constexpr bool operator==(const I&, unreachable) noexcept; template <Iterator I> constexpr bool operator==(unreachable, const I&) noexcept; template <Iterator I> constexpr bool operator!=(const I&, unreachable) noexcept; template <Iterator I> constexpr bool operator!=(unreachable, const I&) noexcept; template <class T> class dangling; template <class T, class CharT = char, class Traits = char_traits<CharT>, class Distance = ptrdiff_t> class istream_iterator; template <class T, class CharT, class Traits, class Distance> bool operator==(const istream_iterator<T, CharT, Traits, Distance>& x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator==(default_sentinel x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator==(const istream_iterator<T, CharT, Traits, Distance>& x, default_sentinel y); template <class T, class CharT, class Traits, class Distance> bool operator!=(const istream_iterator<T, CharT, Traits, Distance>& x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator!=(default_sentinel x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator!=(const istream_iterator<T, CharT, Traits, Distance>& x, default_sentinel y); template <class T, class CharT = char, class Traits = char_traits<CharT>> class ostream_iterator; template <class CharT, class Traits = char_traits<CharT> > class istreambuf_iterator; template <class CharT, class Traits> bool operator==(const istreambuf_iterator<CharT, Traits>& a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator==(default_sentinel a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator==(const istreambuf_iterator<CharT, Traits>& a, default_sentinel b); template <class CharT, class Traits> bool operator!=(const istreambuf_iterator<CharT, Traits>& a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator!=(default_sentinel a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator!=(const istreambuf_iterator<CharT, Traits>& a, default_sentinel b); template <class CharT, class Traits = char_traits<CharT> > class ostreambuf_iterator; }}}} namespace std { template <experimental::ranges::Iterator Out> struct iterator_traits<Out>; template <experimental::ranges::InputIterator In> struct iterator_traits<In>; template <experimental::ranges::InputIterator In> requires experimental::ranges::Sentinel<In, In> struct iterator_traits; }