名前空間
変種

範囲ライブラリ (C++20)

提供: cppreference.com
< cpp
2019年3月16日 (土) 15:30時点におけるMilkpot (トーク | 投稿記録)による版
 
 
 

範囲ライブラリは、様々なビューアダプタを含む、要素の範囲を扱うためのコンポーネントを提供します。

<tbody> </tbody>
ヘッダ <ranges> で定義
namespace std { namespace view = ranges::view; }

名前空間エイリアス std::viewstd::ranges::view の短縮形として提供されます。


ヘッダ <ranges> で定義
名前空間 std::ranges で定義
範囲アクセス
範囲の先頭を指すイテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲の終端を示す番兵を返します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲の逆イテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲の逆終端イテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲プリミティブ
サイズが定数時間で計算可能な範囲のサイズを取得します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲が空かどうか調べます
(カスタマイゼーションポイントオブジェクト) [edit]
隣接範囲の先頭を指すポインタを取得します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲の関連型を取得します
(エイリアステンプレート) [edit]
範囲コンセプト
型が範囲である、つまり、 begin イテレータと end 番兵を提供することを指定します
(コンセプト) [edit]
範囲のサイズを定数時間で取得できることを指定します
(コンセプト) [edit]
範囲がビューである、つまり、コピー/ムーブ/代入が定数時間であることを指定します
(コンセプト) [edit]
input_iterator を満たすイテレータ型を持つ範囲を指定します
(コンセプト) [edit]
output_iterator を満たすイテレータ型を持つ範囲を指定します
(コンセプト) [edit]
forward_iterator を満たすイテレータ型を持つ範囲を指定します
(コンセプト) [edit]
bidirectional_iterator を満たすイテレータ型を持つ範囲を指定します
(コンセプト) [edit]
random_access_iterator を満たすイテレータ型を持つ範囲を指定します
(コンセプト) [edit]
contiguous_iterator を満たすイテレータ型を持つ範囲を指定します
(コンセプト) [edit]
範囲のイテレータ型と番兵型が同一であることを指定します
(コンセプト) [edit]
view に安全に変換可能であるための range に対する要件を指定します
(コンセプト) [edit]
ビュー
奇妙に再帰したテンプレートパターンを用いた view を定義するためのヘルパークラステンプレート
(クラステンプレート) [edit]
イテレータと番兵の組を結合して view にします
(クラステンプレート) [edit]

範囲アダプタ

範囲アダプタは、第1引数として viewable_range を受け取り、 view を返します。 これらはパイプ演算子を用いてチェーンできます。 CD が範囲アダプタで Rviewable_range である場合、以下の2つの式は同等です。

D(C(R))
R | C | D

アダプタが複数の引数を取る場合、以下の形式は同等です。

adaptor(range, args...)
adaptor(args...)(range)
range | adaptor(args...)
ヘッダ <ranges> で定義
名前空間 std::ranges で定義
range のすべての要素を含む view
(エイリアステンプレート) (範囲アダプタオブジェクト) [edit]
述語を満たす range の要素から構成される view
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
各要素に変換関数を適用するシーケンスの view
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
初期値を繰り返しインクリメントすることによって生成されるシーケンスから構成される view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) [edit]
別の view の最初の N 個の要素から構成される view
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
rangeview を平坦化することによって得られるシーケンスから構成される view
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
要素を持たない空の view
(クラステンプレート) (変数テンプレート) [edit]
指定された値の要素1個を格納する view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) [edit]
別の view を区切り文字で分割することによって得られる部分範囲群に対する view
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
イテレータとカウントから部分範囲を作成します
(カスタマイゼーションポイントオブジェクト) [edit]
viewcommon_range に変換します
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
別の双方向ビューの要素を逆順でイテレートする view
(クラステンプレート) (範囲アダプタオブジェクト) [edit]

#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