名前空間
変種
操作

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

提供: cppreference.com
< cpp
 
 
範囲ライブラリ
 

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

ヘッダ <ranges> で定義
namespace std {

    namespace view = ranges::view;

}

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


ヘッダ <ranges> で定義
名前空間 std::ranges で定義

目次

範囲アクセス
範囲の先頭を指すイテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
(C++20)
範囲の終端を指すイテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲の逆イテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
(C++20)
範囲の逆終端イテレータを返します
(カスタマイゼーションポイントオブジェクト) [edit]
(C++20)
サイズが定数時間で計算可能な範囲のサイズを取得します
(カスタマイゼーションポイントオブジェクト) [edit]
(C++20)
範囲が空かどうか調べます
(カスタマイゼーションポイントオブジェクト) [edit]
(C++20)
隣接範囲の先頭を指すポインタを取得します
(カスタマイゼーションポイントオブジェクト) [edit]
範囲プリミティブ
範囲のイテレータおよび番兵の型を取得します
(エイリアステンプレート) [edit]
ダングリングイテレータ対策
ダングリングになるであろうためにイテレータまたは subrange が返されるべきではないことを表すプレースホルダ型
(クラス) [edit]
__ForwardingRange もモデル化する Range のイテレータ型または subrange 型を取得します
(エイリアステンプレート) [edit]
範囲コンセプト
型が範囲である、つまり、 begin イテレータと end 番兵を提供することを指定します
(コンセプト) [edit]
範囲のサイズを定数時間で取得できることを指定します
(コンセプト) [edit]
範囲がビューである、つまり、コピー/ムーブ/代入が定数時間であることを指定します
(コンセプト) [edit]
イテレータの型が InputIterator を満たす範囲を指定します
(コンセプト) [edit]
イテレータの型が OutputIterator を満たす範囲を指定します
(コンセプト) [edit]
イテレータの型が ForwardIterator を満たす範囲を指定します
(コンセプト) [edit]
イテレータの型が BidirectionalIterator を満たす範囲を指定します
(コンセプト) [edit]
イテレータの型が RandomAccessIterator を満たす範囲を指定します
(コンセプト) [edit]
イテレータの型が ContiguousIterator を満たす範囲を指定します
(コンセプト) [edit]
範囲のイテレータと番兵の型が同一であることを指定します
(コンセプト) [edit]
View に安全に変換可能であるための Range に対する要件を指定します
(コンセプト) [edit]
ビュー
奇妙に再帰したテンプレートパターンを用いた View を定義するためのヘルパークラステンプレート
(クラステンプレート) [edit]
イテレータと番兵の組を結合して View にします
(クラステンプレート) [edit]

[編集] 範囲ファクトリ

ヘッダ <ranges> で定義
名前空間 std::ranges で定義
要素を持たない空の View
(クラステンプレート) (変数テンプレート) [edit]
指定された値の要素1個を格納する View
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) [edit]
初期値を繰り返しインクリメントすることによって生成されるシーケンスから構成される View
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) [edit]
イテレータとカウントから部分範囲を作成します
(カスタマイゼーションポイントオブジェクト) [edit]

[編集] 範囲アダプタ

範囲アダプタは、第1引数として ViewableRange を受け取り、 View を返します。 これらはパイプ演算子を用いてチェーンできます。 CD が範囲アダプタで RViewableRange である場合、以下の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]
述語を満たす Range の要素から構成される View
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
各要素に変換関数を適用するシーケンスの View
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
別の View の最初の N 個の要素から構成される View
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
RangeView を平坦化することによって得られるシーケンスから構成される View
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
別の View を区切り文字で分割することによって得られる部分範囲群に対する View
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
ViewCommonRange に変換します
(クラステンプレート) (範囲アダプタオブジェクト) [edit]
別の双方向ビューの要素を逆順でイテレートする View
(クラステンプレート) (範囲アダプタオブジェクト) [edit]

一部の範囲アダプタはその要素または関数オブジェクトを semiregular ラッパーでラップします。

[編集] ヘルパーコンセプト

いくつかの型のために以下の説明専用コンセプトが使用されますが、これらは標準ライブラリのインタフェースの一部ではありません。

template<class R>

  concept __SimpleView =                         // 説明専用
    View<R> && Range<const R> &&
    Same<std::ranges::iterator_t<R>, std::ranges::iterator_t<const R>> &&

    Same<std::ranges::sentinel_t<R>, std::ranges::sentinel_t<const R>>;
template<class T, class U>

  concept __NotSameAs =                          // 説明専用

    !Same<std::remove_cvref_t<T>, std::remove_cvref_t<U>>;

[編集]

#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