Namespaces
Variants

Extensions for ranges

From cppreference.net

C++ Ranges拡張機能(ISO/IEC TS 21425:2017)は、コア言語に対する1つの修正を規定し、このページに列挙されているC++標準ライブラリの新しいコンポーネントを定義します。

Ranges TSは、C++14標準を基にしており、 Concepts TS によって修正されたものです。

目次

コア言語の変更

Ranges TSは 範囲ベース for ループ の仕様を変更し、異なる型のbeginイテレータとendイテレータを許可します。この変更によりセンチネルの使用が可能となり、C++17でも同様の仕様が採用されています。

コンセプト

コア言語コンセプト
ヘッダーで定義 <experimental/ranges/concepts>
名前空間 std::experimental::ranges で定義
ある型が別の型と同じであることを指定する
(コンセプト)
ある型が別の型から派生していることを指定する
(コンセプト)
ある型が別の型に暗黙的に変換可能であることを指定する
(コンセプト)
2つの型が共通の参照型を共有することを指定する
(コンセプト)
2つの型が共通の型を共有することを指定する
(コンセプト)
型が整数型であることを指定する
(コンセプト)
符号付き整数型であることを指定する
(コンセプト)
型が符号なしの整数型であることを指定する
(コンセプト)
ある型が別の型から代入可能であることを指定する
(コンセプト)
型が交換可能であること、または2つの型が互いに交換可能であることを指定する
(コンセプト)
比較コンセプト
定義済みヘッダー <experimental/ranges/concepts>
名前空間 std::experimental::ranges で定義
型がブール値コンテキストで使用できることを指定する
(コンセプト)
2つの型が演算子 == および ! = を使用して等値比較可能であることを指定する
(コンセプト)
operator == が同値関係であることを指定する
(concept)
その型の比較演算子が全順序を生成することを指定する
(コンセプト)
オブジェクト概念
定義済みヘッダー <experimental/ranges/concepts>
名前空間 std::experimental::ranges で定義
その型のオブジェクトが破棄可能であることを指定する
(コンセプト)
その型の変数が引数型のセットから構築可能であるか、またはバインド可能であることを指定する
(コンセプト)
型のオブジェクトがデフォルト構築可能であることを指定する
(コンセプト)
型のオブジェクトがムーブ構築可能であることを指定する
(コンセプト)
型のオブジェクトがコピー構築およびムーブ構築可能であることを指定する
(コンセプト)
型のオブジェクトがムーブおよびスワップ可能であることを指定する
(コンセプト)
型のオブジェクトがコピー、ムーブ、スワップ可能であることを指定する
(コンセプト)
ある型のオブジェクトがコピー、ムーブ、スワップ、デフォルト構築可能であることを指定する
(コンセプト)
型がregularであることを指定します。つまり、 Semiregular かつ EqualityComparable であることを意味します
(コンセプト)
Callable コンセプト
ヘッダーで定義 <experimental/ranges/concepts>
名前空間 std::experimental::ranges で定義
指定された引数型のセットで呼び出し可能な型であることを指定する
(コンセプト)
呼び出し可能な型がブール述語であることを指定する
(コンセプト)
呼び出し可能な型が二項関係であることを指定する
(コンセプト)
Relation が厳密弱順序を課すことを指定する
(コンセプト)
乱数生成器コンセプト
ヘッダーで定義 <experimental/ranges/random>
名前空間 std::experimental::ranges で定義
型が一様乱数生成器として適格であることを指定する
(コンセプト)

汎用ユーティリティ

ユーティリティコンポーネント
ヘッダーで定義 <experimental/ranges/utility>
名前空間 std::experimental::ranges で定義
2つのオブジェクトの値を交換する
(カスタマイゼーションポイントオブジェクト)
引数を新しい値で置き換え、その前の値を返す
(関数テンプレート)
関数オブジェクト
名前空間 std::experimental::ranges で定義
指定された引数で Callable オブジェクトを呼び出す
(関数テンプレート)
x == y を実装する関数オブジェクト x == y
(クラステンプレート)
関数オブジェクトの実装 x ! = y
(クラステンプレート)
関数オブジェクトの実装 x > y
(クラステンプレート)
x < y を実装する関数オブジェクト
(クラステンプレート)
x >= y を実装する関数オブジェクト
(クラステンプレート)
関数オブジェクトの実装 x <= y
(クラステンプレート)
引数を変更せずに返す関数オブジェクト
(クラス)
メタプログラミングと型特性
定義済みヘッダー <experimental/ranges/type_traits>
名前空間 std::experimental::ranges で定義
ある型のオブジェクトが同じ型または異なる型のオブジェクトと交換可能かどうかをチェックする
(クラステンプレート)
型の集合の共通参照型を決定する
(クラステンプレート)
型の集合の共通型を決定する
(クラステンプレート)
タグ付きペアとタプル
ヘッダーで定義 <experimental/ranges/utility>
名前空間 std::experimental::ranges で定義
型がタグ指定子であることを指定する
(コンセプト)
型がタグ指定子とその要素型を表すことを指定する
(コンセプト)
タプルライクな型に名前付きアクセサを追加する
(クラステンプレート)
タグ付き std::pair のエイリアステンプレート
(エイリアステンプレート)
tagged_pair を作成するための便利関数
(関数テンプレート)
ヘッダーで定義 <experimental/ranges/tuple>
タグ付き std::tuple のエイリアステンプレート
(エイリアステンプレート)
tagged_tuple を作成するための便利関数
(関数テンプレート)
定義済みヘッダー <experimental/ranges/algorithm>
名前空間 std::experimental::ranges::tag で定義
ranges::tagged で使用するタグ指定子
(クラス)

イテレータ

定義済みヘッダー <experimental/ranges/iterator>
イテレータ関連コンセプト
名前空間 std::experimental::ranges で定義
イテレータコンセプト
型が * 演算子を適用することで読み取り可能であることを指定する
(コンセプト)
イテレータの参照先オブジェクトに値を書き込めることを指定する
(コンセプト)
Semiregular 型が前置および後置インクリメント演算子でインクリメント可能であることを指定する
(コンセプト)
WeaklyIncrementable 型に対するインクリメント操作が等価性を保存し、かつその型が EqualityComparable であることを指定する
(コンセプト)
ある型のオブジェクトがインクリメントおよびデリファレンス可能であることを指定する
(コンセプト)
ある型のオブジェクトが Iterator 型に対するセンチネルであることを指定する
(コンセプト)
イテレータとセンチネルに - 演算子を適用して、それらの差を定数時間で計算できることを指定する
(コンセプト)
型が入力イテレータであることを指定します。つまり、参照する値を読み取ることができ、前置および後置インクリメントが可能です
(コンセプト)
指定された値型に対する出力イテレータであることを指定する。つまり、その型の値を書き込むことができ、前置および後置インクリメントが可能である
(コンセプト)
InputIterator が前方イテレータであることを指定し、等値比較とマルチパスをサポートする
(コンセプト)
ForwardIterator が双方向イテレータであることを指定し、後方への移動をサポートする
(コンセプト)
BidirectionalIterator がランダムアクセスイテレータであることを指定し、定数時間での前進・後退と添字アクセスをサポートする
(コンセプト)
間接呼び出し可能コンセプト
Readable 型のデリファレンス結果で呼び出し可能な型であることを指定する
(コンセプト)
呼び出し可能オブジェクトが、 Readable 型の間接参照結果で呼び出されたときに、 Predicate を満たすことを指定する
(コンセプト)
呼び出し可能オブジェクトが、いくつかの Readable 型の間接参照結果で呼び出されたときに、 Relation を満たすことを指定する
(コンセプト)
呼び出し可能オブジェクトが、いくつかの Readable 型の間接参照結果で呼び出されたときに、 StrictWeakOrder を満たすことを指定する
(コンセプト)
共通アルゴリズム要件
Readable 型から Writable 型へ値がムーブ可能であることを指定する
(コンセプト)
Readable 型から Writable 型へ値が移動可能であり、中間オブジェクトを介して移動が実行可能であることを指定する
(コンセプト)
Readable 型から Writable 型へ値がコピー可能であることを指定する
(コンセプト)
値が Readable 型から Writable 型へコピー可能であり、中間オブジェクトを介してコピーが実行可能であることを指定する
(コンセプト)
2つの Readable 型によって参照される値を交換できることを指定する
(コンセプト)
2つの Readable 型によって参照される値を比較できることを指定する
(コンセプト)
要素をその場で並べ替えるアルゴリズムの共通要件を指定する
(コンセプト)
ソートされたシーケンスを要素のコピーによって出力シーケンスにマージするアルゴリズムの要件を指定する
(コンセプト)
シーケンスを順序付けられたシーケンスに並べ替えるアルゴリズムの共通要件を指定する
(コンセプト)
コンセプトユーティリティ
いくつかの Readable 型の間接参照結果に対して呼び出し可能オブジェクトを呼び出した結果を計算する
(クラステンプレート)
射影を受け入れるアルゴリズムの制約を指定するためのヘルパーテンプレート
(クラステンプレート)
イテレータ基本要素
イテレータユーティリティ
名前空間 std::experimental::ranges で定義
オブジェクトを間接参照した結果を、関連付けられた右辺値参照型にキャストする
(カスタマイゼーションポイントオブジェクト)
二つの間接参照可能なオブジェクトが参照する値を交換する
(カスタマイゼーションポイントオブジェクト)
イテレータ特性
名前空間 std::experimental::ranges で定義
WeaklyIncrementable 型の差動型を取得する
(クラステンプレート)
Readable 型の値型を取得する
(クラステンプレート)
入力イテレータ型のイテレータカテゴリを取得する
(クラステンプレート)
イテレータの関連型を収集する互換性トレイトクラス
(エイリアステンプレート)
間接参照可能なオブジェクトの関連する参照型を取得する
(エイリアステンプレート)
イテレータカテゴリタグ
名前空間 std::experimental::ranges で定義
イテレータカテゴリを示すために使用される空のクラス型
(クラス)
std::iterator_traits 特殊化
名前空間 std で定義
ranges TSイテレータに対する std::iterator_traits の特殊化
(クラステンプレートの特殊化)
イテレータ操作
名前空間 std::experimental::ranges で定義
指定された距離だけイテレータを進める
(関数テンプレート)
イテレータとセンチネル間、または範囲の先頭と終端間の距離を返す
(関数テンプレート)
イテレータをインクリメントする
(関数テンプレート)
イテレータをデクリメントする
(関数テンプレート)
イテレータアダプタ
名前空間 std::experimental::ranges で定義
逆順走査のためのイテレータアダプタ
(クラステンプレート)
コンテナの末尾への挿入のためのイテレータアダプタ
(クラステンプレート)
コンテナの先頭への挿入用イテレータアダプタ
(クラステンプレート)
コンテナへの挿入のためのイテレータアダプタ
(クラステンプレート)
右辺値参照にデリファレンスするイテレータアダプタ
(クラステンプレート)
move_iterator で使用するためのセンチネルアダプタ
(クラステンプレート)
イテレータ-センチネルペアを従来のアルゴリズムで使用するための共通イテレータ型に適合させる
(クラステンプレート)
開始位置からの距離を追跡するイテレータアダプタ
(クラステンプレート)
自身の範囲の境界を知っているイテレータ型で使用する空のセンチネル型
(クラス)
ダングリングする可能性のあるイテレータのラッパー
(クラステンプレート)
右辺値範囲のイテレータ型を dangling でラップするエイリアステンプレート
(エイリアステンプレート)
任意のイテレータと共に使用され、無限範囲を示すセンチネル型
(クラス)
ストリームイテレータ
名前空間 std::experimental::ranges で定義
std::basic_istream から読み込む入力イテレータ
(クラステンプレート)
std::basic_ostream に書き込む出力イテレータ
(クラステンプレート)
std::basic_streambuf から読み込む input iterator
(クラステンプレート)
std::basic_streambuf に書き込む出力イテレータ
(クラステンプレート)

Ranges

Range コンセプト
型が range であること、すなわち begin イテレータと end センチネルを提供することを指定する
(コンセプト)
range が定数時間でサイズを知ることを指定する
(コンセプト)
range が view であること、すなわち定数時間でのコピー/ムーブ/代入を持つことを指定する
(コンセプト)
range が同一のイテレータ型とセンチネル型を持つことを指定する
(コンセプト)
イテレータ型が InputIterator を満たす range を指定する
(コンセプト)
イテレータ型が OutputIterator を満たす range を指定する
(コンセプト)
イテレータ型が ForwardIterator を満たす range を指定する
(コンセプト)
イテレータ型が BidirectionalIterator を満たす range を指定する
(コンセプト)
イテレータ型が RandomAccessIterator を満たす range を指定する
(コンセプト)
Range アクセス
名前空間で定義 std::experimental::ranges
range の先頭へのイテレータを返す
(カスタマイゼーションポイントオブジェクト)
range の終端へのイテレータを返す
(カスタマイゼーションポイントオブジェクト)
range への逆順イテレータを返す
(カスタマイゼーションポイントオブジェクト)
range への逆順終端イテレータを返す
(カスタマイゼーションポイントオブジェクト)
Range プリミティブ
名前空間で定義 std::experimental::ranges
定数時間でサイズを計算できる range のサイズを取得する
(カスタマイゼーションポイントオブジェクト)
range が空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト)
連続した range の先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト)
range のイテレータ型とセンチネル型を取得する
(エイリアステンプレート)

アルゴリズム

定義済みヘッダー <experimental/ranges/algorithm>
非変更シーケンス操作
名前空間 std::experimental::ranges で定義
述語が範囲内のすべての要素、いずれかの要素、またはいずれの要素に対しても true となるかどうかをチェックする
(関数テンプレート)
要素の範囲に関数を適用する
(関数テンプレート)
特定の条件を満たす要素の数を返す
(関数テンプレート)
2つの範囲が最初に異なる位置を見つける
(関数テンプレート)
2つの要素セットが同一かどうかを判定する
(関数テンプレート)
ある範囲が別の範囲より辞書順で小さい場合に true を返す
(関数テンプレート)
特定の条件を満たす最初の要素を見つける
(関数テンプレート)
特定の範囲内で要素の最後のシーケンスを見つける
(関数テンプレート)
要素の集合のいずれかを検索します
(関数テンプレート)
等しい(または与えられた述語を満たす)最初の2つの隣接する要素を見つける
(関数テンプレート)
要素の範囲を検索します
(関数テンプレート)
範囲内で要素の連続する個数を検索する
(関数テンプレート)
シーケンス変更操作
名前空間 std::experimental::ranges で定義
要素の範囲を新しい場所にコピーします
(関数テンプレート)
指定された数の要素を新しい場所にコピーする
(関数テンプレート)
要素の範囲を逆順にコピーします
(関数テンプレート)
要素の範囲を新しい位置に移動する
(関数テンプレート)
要素の範囲を逆順に新しい位置へ移動する
(関数テンプレート)
指定された範囲の要素に特定の値を代入する
(関数テンプレート)
指定された数の要素に値を代入する
(関数テンプレート)
要素の範囲に関数を適用する
(関数テンプレート)
関数の結果を範囲に保存する
(関数テンプレート)
関数をN回適用した結果を保存する
(関数テンプレート)
特定の条件を満たす要素を削除する
(関数テンプレート)
特定の条件を満たす要素を除外して範囲の要素をコピーする
(関数テンプレート)
特定の条件を満たすすべての値を別の値で置き換える
(関数テンプレート)
範囲をコピーし、特定の条件を満たす要素を別の値で置換する
(関数テンプレート)
二つの範囲の要素を交換する
(関数テンプレート)
範囲内の要素の順序を逆にする
(関数テンプレート)
範囲を逆順にしたコピーを作成する
(関数テンプレート)
範囲内の要素の順序を回転させる
(関数テンプレート)
要素の範囲をコピーして回転させる
(関数テンプレート)
範囲内の要素をランダムに並べ替える
(関数テンプレート)
範囲内の連続した重複要素を削除する
(関数テンプレート)
連続する重複を含まない要素範囲のコピーを作成する
(関数テンプレート)
パーティショニング操作
名前空間 std::experimental::ranges で定義
指定された述語によって範囲が分割されているかどうかを判定する
(関数テンプレート)
要素の範囲を2つのグループに分割する
(関数テンプレート)
範囲の要素を2つのグループに分割してコピーする
(関数テンプレート)
要素を二つのグループに分割し、それらの相対的な順序を保持する
(関数テンプレート)
分割済み範囲の分割点を特定する
(関数テンプレート)
ソート操作
名前空間 std::experimental::ranges で定義
範囲が昇順にソートされているかどうかをチェックする
(関数テンプレート)
最大のソート済み部分範囲を検索する
(関数テンプレート)
範囲を昇順にソートします
(関数テンプレート)
範囲の最初のN個の要素をソートする
(関数テンプレート)
要素の範囲をコピーし部分的にソートする
(関数テンプレート)
等しい要素間の順序を維持しながら範囲の要素をソートする
(関数テンプレート)
指定された要素によって分割されることを保証しながら、与えられた範囲を部分的にソートする
(関数テンプレート)
二分探索操作(ソート済み範囲に対する)
名前空間 std::experimental::ranges で定義
指定された値 以上 の最初の要素へのイテレータを返す
(関数テンプレート)
指定された値 より大きい 最初の要素へのイテレータを返す
(関数テンプレート)
指定された範囲内に要素が存在するかどうかを判定する
(関数テンプレート)
特定のキーに一致する要素の範囲を返す
(関数テンプレート)
集合演算(ソート済み範囲に対する)
名前空間 std::experimental::ranges で定義
二つのソート済み範囲をマージする
(関数テンプレート)
二つの整列された範囲をその場でマージする
(関数テンプレート)
ある集合が別の集合の部分集合である場合に true を返す
(関数テンプレート)
2つの集合の差を計算する
(関数テンプレート)
2つの集合の積集合を計算する
(関数テンプレート)
2つの集合の対称差を計算する
(関数テンプレート)
2つの集合の和集合を計算する
(関数テンプレート)
ヒープ操作
名前空間 std::experimental::ranges で定義
指定された範囲が最大ヒープであるかどうかをチェックする
(関数テンプレート)
最大ヒープである最大の部分範囲を検索する
(関数テンプレート)
要素の範囲から最大ヒープを作成する
(関数テンプレート)
要素を最大ヒープに追加する
(関数テンプレート)
最大ヒープから最大要素を削除する
(関数テンプレート)
最大ヒープを昇順にソートされた要素の範囲に変換する
(関数テンプレート)
最小値/最大値 操作
名前空間 std::experimental::ranges で定義
与えられた値のうち大きい方を返す
(関数テンプレート)
範囲内の最大要素を返す
(関数テンプレート)
与えられた値のうち小さい方を返す
(関数テンプレート)
範囲内の最小要素を返す
(関数テンプレート)
2つの要素のうち小さい方と大きい方を返す
(関数テンプレート)
範囲内の最小要素と最大要素を返す
(関数テンプレート)
順列操作
名前空間 std::experimental::ranges で定義
あるシーケンスが別のシーケンスの順列であるかどうかを判定する
(関数テンプレート)
要素の範囲に対して、辞書順で次に大きい順列を生成する
(関数テンプレート)
要素の範囲の次のより小さい辞書順の順列を生成する
(関数テンプレート)