範囲の拡張機能
From cppreference.com
< cpp | experimental
The C++ Extensions for Ranges, ISO/IEC TS 21425:2017 は、コア言語への 1 つの変更を指定し、このページに記載されている C++ 標準ライブラリの新しいコンポーネントを定義します。
The Ranges TS is based on the C++14 standard as modified by the Concepts TS.
目次 |
[編集] コア言語の変更
The Ranges TS modifies the specification of the range-based for loop to permit differently typed begin and end iterators. This change permits the use of sentinels and is also present in C++17.
[編集] コンセプト
中核言語のコンセプト | |
| Defined in header
<experimental/ranges/concepts> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 型が別の型と同一であることを規定する (concept) | |
| 型が別の型から派生していることを規定する (concept) | |
| 型が別の型に暗黙的に変換可能であることを規定する (concept) | |
| 2つの型が共通の参照型を共有することを規定する (concept) | |
| 2つの型が共通の型を共有することを規定する (concept) | |
| 型が整数型であることを規定する (concept) | |
| 型が符号付き整数型であることを規定する (concept) | |
| signedではない整数型であることを指定します (concept) | |
| 型が別の型から代入可能であることを規定する (concept) | |
| 型が交換可能であること、または2つの型が互いに交換可能であることを規定する (concept) | |
比較のコンセプト | |
| Defined in header
<experimental/ranges/concepts> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 型が真偽値コンテキストで使用可能であることを規定する (concept) | |
| equality operators == and != を使用して、2 つの型を等価比較できることを指定します。 (concept) | |
| 演算子==が同値関係であることを規定する (concept) | |
| その型の比較演算子が全順序をもたらすことを規定する (concept) | |
オブジェクトのコンセプト | |
| Defined in header
<experimental/ranges/concepts> | |
std::experimental::ranges 名前空間で定義されます。 | |
| その型のオブジェクトが破棄可能であることを規定する (concept) | |
| その型の変数が、一連の引数型から構築可能、または束縛可能であることを規定する (concept) | |
| その型のオブジェクトがデフォルト構築可能であることを規定する (concept) | |
| その型のオブジェクトがムーブ構築可能であることを規定する (concept) | |
| その型のオブジェクトがコピー構築およびムーブ構築可能であることを規定する (concept) | |
| その型のオブジェクトがムーブおよび交換可能であることを規定する (concept) | |
| その型のオブジェクトがコピー、ムーブ、および交換可能であることを規定する (concept) | |
| その型のオブジェクトがコピー、ムーブ、交換、およびデフォルト構築可能であることを規定する (concept) | |
regularな型であることを指定します。つまり、Semiregular と EqualityComparable の両方です。(concept) | |
呼び出し可能オブジェクトのコンセプト | |
| Defined in header
<experimental/ranges/concepts> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 呼び出し可能型が、与えられた一連の引数型で呼び出し可能であることを規定する (concept) | |
| 呼び出し可能型が真偽値を返す述語 (Boolean predicate) であることを規定する (concept) | |
| 呼び出し可能型が二項関係 (binary relation) であることを規定する (concept) | |
Relation が厳密な弱順序を課すことを指定します。(concept) | |
乱数生成器コンセプト | |
| Defined in header
<experimental/ranges/random> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 型が一様乱数生成器の資格を満たすことを指定します。 (concept) | |
[編集] 一般ユーティリティ
ユーティリティコンポーネント | |
| Defined in header
<experimental/ranges/utility> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 2 つのオブジェクトの値を交換します。 (customization point object) | |
| 引数を新しい値で置き換え、その前の値を返す (function template) | |
関数オブジェクト | |
| Defined in header
<experimental/ranges/functional> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 指定された引数で Callable オブジェクトを呼び出します。 (function template) | |
| x == y を実装する関数オブジェクト (class template) | |
| x != y を実装する関数オブジェクト (class template) | |
| x > y を実装する関数オブジェクト (class template) | |
| x < y を実装する関数オブジェクト (class template) | |
| x >= y を実装する関数オブジェクト (class template) | |
| x <= y を実装する関数オブジェクト (class template) | |
| 引数を変更せずにそのまま返す関数オブジェクト (class) | |
メタプログラミングと型特性 | |
| Defined in header
<experimental/ranges/type_traits> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 型のオブジェクトが同じまたは異なる型のオブジェクトとスワップ可能であるかをチェックする (class template) | |
| 型の共通参照型を決定します。 (class template) | |
| 型の共通型を決定します。 (class template) | |
タグ付きペアとタプル | |
| Defined in header
<experimental/ranges/utility> | |
std::experimental::ranges 名前空間で定義されます。 | |
| 型がタグ指定子であることを指定します (コンセプト) | |
| 型がタグ指定子とその要素型を表すことを指定します (コンセプト) | |
| 名前付きアクセサでタプルライクな型を拡張します (クラステンプレート) | |
| タグ付き std::pair のエイリアステンプレート (エイリアステンプレート) | |
tagged_pair を作成するための便利な関数(関数テンプレート) | |
| Defined in header
<experimental/ranges/tuple> | |
| タグ付き std::tuple のエイリアステンプレート。 (alias template) | |
tagged_tuple を作成するための便利な関数。(function template) | |
| Defined in header
<experimental/ranges/algorithm> | |
| Defined in namespace
std::experimental::ranges::tag | |
| ranges::tagged と共に使用するタグ指定子。 (class) | |
[編集] イテレータ
| Defined in header
<experimental/ranges/iterator> | |
| | |
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) | |
Concept utilities | |
いくつかの Readable 型の結果を呼び出して、呼び出し可能オブジェクトの結果を計算します。(class template) | |
| 射影を受け入れるアルゴリズムの制約を指定するためのヘルパーテンプレート (class template) | |
イテレータのプリミティブ | |
イテレータユーティリティ | |
std::experimental::ranges 名前空間で定義されます。 | |
| オブジェクトの間接参照の結果を、その関連する右辺値参照型にキャストする (customization point object) | |
| 2 つの逆参照可能なオブジェクトによって参照される値を交換します。 (customization point object) | |
Iterator traits | |
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) | |
[編集] 範囲
| ヘッダー
<experimental/ranges/range>で定義されています | |
Rangeコンセプト | |
型がrangeであること、すなわち begin イテレータと end 番兵を提供することを規定する(concept) | |
| rangeが定数時間でそのサイズを知っていることを規定する (concept) | |
| rangeがviewであること、すなわち定数時間でのコピー/ムーブ/代入を持つことを規定する (concept) | |
| rangeが同一のイテレータ型と番兵型を持つことを規定する (concept) | |
イテレータ型が InputIterator を満たす範囲を指定します。(concept) | |
イテレータ型が OutputIterator を満たす範囲を指定します。(concept) | |
イテレータ型が ForwardIterator を満たす範囲を指定します。(concept) | |
イテレータ型が BidirectionalIterator を満たす範囲を指定します。(concept) | |
イテレータ型が RandomAccessIterator を満たす範囲を指定します。(concept) | |
Rangeアクセス | |
std::experimental::ranges 名前空間で定義されます。 | |
| rangeの先頭を指すイテレータを返す (customization point object) | |
| 範囲の末尾へのイテレータを返します。 (customization point object) | |
| rangeへの逆イテレータを返す (customization point object) | |
| rangeへの逆終端イテレータを返す (customization point object) | |
Rangeプリミティブ | |
std::experimental::ranges 名前空間で定義されます。 | |
| 定数時間で計算可能なサイズを持つ範囲のサイズを取得します。 (customization point object) | |
| rangeが空かどうかをチェックする (customization point object) | |
| 連続rangeの先頭へのポインタを取得する (customization point object) | |
| 範囲のイテレータ型とセンチネル型を取得します。 (alias template) | |
[編集] アルゴリズム
| Defined in header
<experimental/ranges/algorithm> | |
シーケンスを変更しない操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| 範囲内のすべての、いずれかの、またはどの要素も述語が true にならないかをチェックする (function template) | |
| 要素の範囲に関数を適用する (function template) | |
| 特定の基準を満たす要素の数を返す (function template) | |
| 2つの範囲が異なる最初の位置を見つける (function template) | |
| 2つの要素の集合が同じかどうかを判断する (function template) | |
| ある範囲が別の範囲より辞書順で小さい場合に true を返す (function template) | |
| 特定の基準を満たす最初の要素を見つける (function template) | |
| 特定の範囲内で最後の要素のシーケンスを見つける (function template) | |
| 要素の集合のうちいずれか1つを検索する (function template) | |
| 等しい(または指定された述語を満たす)最初の2つの隣接する項目を見つける (function template) | |
| 要素の範囲を検索します。 (function template) | |
| 範囲内の要素の連続したコピーを検索します。 (function template) | |
シーケンスを変更する操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| 要素の範囲を新しい場所にコピーする (function template) | |
| 指定された数の要素を新しい場所にコピーする (function template) | |
| 要素の範囲を逆順にコピーする (function template) | |
| 要素の範囲を新しい場所にムーブする (function template) | |
| 要素の範囲を逆順で新しい場所にムーブする (function template) | |
| 要素の範囲に特定の値を代入する (function template) | |
| 指定された数の要素に値を代入する (function template) | |
| 要素の範囲に関数を適用する (function template) | |
| 関数の結果を範囲に保存する (function template) | |
| 関数のN回の適用の結果を保存する (function template) | |
| 特定の基準を満たす要素を削除する (function template) | |
| 特定の基準を満たす要素を除外して範囲をコピーする (function template) | |
| 特定の基準を満たすすべての値を別の値に置き換える (function template) | |
| 特定の基準を満たす要素を別の値に置き換えながら範囲をコピーする (function template) | |
| 2つの要素の範囲を交換する (function template) | |
| 範囲内の要素の順序を逆にする (function template) | |
| 逆順になった範囲のコピーを作成する (function template) | |
| 範囲内の要素の順序を回転させる (function template) | |
| 要素の範囲をコピーして回転させる (function template) | |
| 範囲内の要素をランダムに並べ替える (function template) | |
| 範囲内の連続する重複要素を削除する (function template) | |
| 連続する重複を含まない要素の範囲のコピーを作成する (function template) | |
パーティション操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| 範囲が指定された述語によってパーティション化されているかどうかを判断する (function template) | |
| 要素の範囲を2つのグループに分割する (function template) | |
| 要素を2つのグループに分割しながら範囲をコピーする (function template) | |
| 相対的な順序を維持しながら要素を2つのグループに分割する (function template) | |
| パーティション化された範囲のパーティションポイントを見つける (function template) | |
ソート操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| 範囲が昇順にソートされているかどうかをチェックする (function template) | |
| ソートされている最大のサブ範囲を見つける (function template) | |
| 範囲を昇順にソートする (function template) | |
| 範囲の最初のN個の要素をソートする (function template) | |
| 要素の範囲をコピーして部分的にソートする (function template) | |
| 等しい要素間の順序を維持しながら要素の範囲をソートする (function template) | |
| 与えられた範囲を部分的にソートし、指定された要素によってパーティション化されるようにする (function template) | |
二分探索操作 (ソート済み範囲) | |
std::experimental::ranges 名前空間で定義されます。 | |
| 与えられた値より小さくない最初の要素へのイテレータを返す (function template) | |
| 特定の値より大きい最初の要素へのイテレータを返す (function template) | |
| 要素が指定された範囲に存在するかどうかを決定します。 (function template) | |
| 特定のキーに一致する要素の範囲を返す (function template) | |
集合操作 (ソート済み範囲) | |
std::experimental::ranges 名前空間で定義されます。 | |
| 2つのソート済み範囲をマージする (function template) | |
| 2つの順序付けられた範囲をインプレースでマージする (function template) | |
| 一方のセットがもう一方のサブセットであるかどうかを true で返します。 (function template) | |
| 2つの集合の差を計算する (function template) | |
| 2つの集合の積を計算する (function template) | |
| 2つの集合の対称差を計算する (function template) | |
| 2つの集合の和を計算する (function template) | |
ヒープ操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| 与えられた範囲が最大ヒープであるかをチェックする (function template) | |
| 最大ヒープである最大のサブ範囲を見つける (function template) | |
| 要素の範囲から最大ヒープを作成する (function template) | |
| 最大ヒープに要素を追加する (function template) | |
| 最大ヒープから最大の要素を削除する (function template) | |
| 最大ヒープを昇順にソートされた要素の範囲に変換する (function template) | |
最小/最大操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| 与えられた値のうち大きい方を返す (function template) | |
| 範囲内で最大の要素を返す (function template) | |
| 与えられた値のうち小さい方を返す (function template) | |
| 範囲内で最小の要素を返す (function template) | |
| 2つの要素の小さい方と大きい方を返す (function template) | |
| 範囲内で最小の要素と最大の要素を返す (function template) | |
順列操作 | |
std::experimental::ranges 名前空間で定義されます。 | |
| あるシーケンスが別のシーケンスの順列であるかを判断する (function template) | |
| 要素の範囲の次に大きい辞書順の順列を生成する (function template) | |
| 要素の範囲の次に小さい辞書順の順列を生成する (function template) | |