範囲ライブラリ (C++20)
提供: cppreference.com
< cpp
範囲ライブラリは、様々なビューアダプタを含む、要素の範囲を扱うためのコンポーネントを提供します。
| ヘッダ <ranges> で定義
|
||
| namespace std { namespace view = ranges::view; |
||
名前空間エイリアス std::view が std::ranges::view の短縮形として提供されます。
| ヘッダ
<ranges> で定義 | ||
| 名前空間
std::ranges で定義 | ||
範囲アクセス | ||
| 範囲の先頭を指すイテレータを返します (カスタマイゼーションポイントオブジェクト) | ||
| 範囲の終端を指すイテレータを返します (カスタマイゼーションポイントオブジェクト) | ||
| 範囲の逆イテレータを返します (カスタマイゼーションポイントオブジェクト) | ||
| 範囲の逆終端イテレータを返します (カスタマイゼーションポイントオブジェクト) | ||
範囲プリミティブ | ||
| サイズが定数時間で計算可能な範囲のサイズを取得します (カスタマイゼーションポイントオブジェクト) | ||
| 範囲が空かどうか調べます (カスタマイゼーションポイントオブジェクト) | ||
| 隣接範囲の先頭を指すポインタを取得します (カスタマイゼーションポイントオブジェクト) | ||
| 範囲のイテレータおよび番兵の型を取得します (エイリアステンプレート) | ||
範囲コンセプト | ||
型が範囲である、つまり、 begin イテレータと end 番兵を提供することを指定します (コンセプト) | ||
| 範囲のサイズを定数時間で取得できることを指定します (コンセプト) | ||
| 範囲がビューである、つまり、コピー/ムーブ/代入が定数時間であることを指定します (コンセプト) | ||
イテレータの型が InputIterator を満たす範囲を指定します (コンセプト) | ||
イテレータの型が OutputIterator を満たす範囲を指定します (コンセプト) | ||
イテレータの型が ForwardIterator を満たす範囲を指定します (コンセプト) | ||
イテレータの型が BidirectionalIterator を満たす範囲を指定します (コンセプト) | ||
イテレータの型が RandomAccessIterator を満たす範囲を指定します (コンセプト) | ||
イテレータの型が ContiguousIterator を満たす範囲を指定します (コンセプト) | ||
| 範囲のイテレータと番兵の型が同一であることを指定します (コンセプト) | ||
View に安全に変換可能であるための Range に対する要件を指定します (コンセプト) | ||
ビュー | ||
奇妙に再帰したテンプレートパターンを用いた View を定義するためのヘルパークラステンプレート (クラステンプレート) | ||
イテレータと番兵の組を結合して View にします (クラステンプレート) | ||
[編集] 範囲アダプタ
範囲アダプタは、第1引数として ViewableRange を受け取り、 View を返します。 これらはパイプ演算子を用いてチェーンできます。 C と D が範囲アダプタで R が ViewableRange である場合、以下の2つの式は同等です。
D(C(R)) R | C | D
アダプタが複数の引数を取る場合、以下の形式は同等です。
adaptor(range, args...) adaptor(args...)(range) range | adaptor(args...)
| ヘッダ
<ranges> で定義 | |
| 名前空間
std::ranges で定義 | |
Range のすべての要素を含む View (エイリアステンプレート) (範囲アダプタオブジェクト) | |
述語を満たす Range の要素から構成される View (クラステンプレート) (範囲アダプタオブジェクト) | |
各要素に変換関数を適用するシーケンスの View (クラステンプレート) (範囲アダプタオブジェクト) | |
初期値を繰り返しインクリメントすることによって生成されるシーケンスから構成される View (クラステンプレート) (範囲アダプタオブジェクト) | |
別の View の最初の N 個の要素から構成される View (クラステンプレート) (範囲アダプタオブジェクト) | |
Range の View を平坦化することによって得られるシーケンスから構成される View (クラステンプレート) (範囲アダプタオブジェクト) | |
要素を持たない空の View (クラステンプレート) (範囲アダプタオブジェクト) | |
指定された値の要素1個を格納する View (クラステンプレート) (範囲アダプタオブジェクト) | |
別の View を区切り文字で分割することによって得られる部分範囲群に対する View (クラステンプレート) (範囲アダプタオブジェクト) | |
| イテレータとカウントから部分範囲を作成します (カスタマイゼーションポイントオブジェクト) | |
View を CommonRange に変換します (クラステンプレート) (範囲アダプタオブジェクト) | |
別の双方向ビューの要素を逆順でイテレートする View (クラステンプレート) (範囲アダプタオブジェクト) | |
[編集] 例
Run this code
#include <vector> #include <ranges> #include <iostream> int main() { std::vector<int> ints{0,1,2,3,4,5}; auto even = [](int i){ return 0 == i % 2; }; auto square = [](int i) { return i * i; }; for (int i : ints | std::view::filter(even) | std::view::transform(square)) { std::cout << i << ' '; } }
出力:
0 4 16

