namespace std::ranges {
template<input_or_output_iterator I, sentinel_for<I> S = I, subrange_kind K = sized_sentinel_for<S, I> ? subrange_kind::sized : subrange_kind::unsized>
requires (K == subrange_kind::sized || !sized_sentinel_for<S, I>)
class subrange : public view_interface<subrange<I, S, K>> { …… };
}
概要
subrangeは、イテレータiと番兵sが表すイテレータ範囲[i, s)をRangeとして扱うクラステンプレート。
subrangeはborrowed_range、viewのモデルであり、また、大きさ2のtuple-likeな型である。第0要素はイテレータ、第1要素は番兵。
subrangeはsized_rangeである場合(K == subrange_kind::sized)とそうでない場合(K == subrange_kind::unsized)の両方をサポートする。
また、元のRangeがsized_rangeでなくても、長さを別に指定することでsized_rangeになれる。
テンプレートパラメータ制約
subrange_kind Kがsizedである。または、イテレータIと番兵Sがsized_sentinel_forを満たさない。
メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(constructor) |
コンストラクタ | C++20 |
operator PairLike |
pair-likeな型に変換する |
C++20 |
begin |
先頭を指すイテレータを取得する | C++20 |
end |
番兵を取得する | C++20 |
empty |
Rangeが空かどうかを判定する | C++20 |
size |
要素数を取得する | C++20 |
next |
先頭を前進させた部分Rangeを得る | C++20 |
prev |
先頭を後退させた部分Rangeを得る | C++20 |
advance |
部分Rangeの先頭を動かす | C++20 |
継承しているメンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator bool |
Rangeが空でないかどうかを判定する | C++20 |
data |
配列の先頭へのポインタを取得する | C++20 |
front |
先頭要素への参照を取得する | C++20 |
back |
末尾要素への参照を取得する | C++20 |
operator[] |
要素へアクセスする | C++20 |
cbegin |
定数イテレータを取得する | C++23 |
cend |
定数イテレータ(番兵)を取得する | C++23 |
推論補助
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(deduction_guide) |
クラステンプレートの推論補助 | C++20 |
カスタマイゼーション
| 名前 | 説明 | 対応バージョン |
|---|---|---|
enable_borrowed_range |
enable_borrowed_rangeの特殊化 (variable template) |
C++20 |
タプルインターフェース
| 名前 | 説明 | 対応バージョン |
|---|---|---|
tuple_size |
静的な要素数取得(class template) | C++20 |
tuple_element |
静的な要素の型取得(class template) | C++20 |
get |
要素を取得する(function template) | C++20 |
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅